您的位置:首页 > 移动开发

javascript基础(函数属性arguments,方法:call,apply)(二十)

2017-02-08 15:47 609 查看
1.函数属性arguments,方法:call,apply:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">

/*
* 除了this,在调用函数时,浏览器还传递了另一个隐含的参数
* 还有一个参数叫做arguments
*
* arguments是一个类数组对象,在它里边保存着函数执行时的实参
* 函数的所有的实参都在arguments中保存,
* 通过arguments即使不定义形参也可以使用参数
*
* 属性:
* callee
* - arguments中有一个属性 callee,代表的是当前正在调用的函数对象
*
*/
function fun(a,b,c){

//Array.isArray() 可以用来检查一个对象是否是一个数组
//console.log(Array.isArray(arguments));

//获取实参的数量
//console.log(arguments.length);

//获取指定的实参
//实参会保存到arguments对象中指定的位置
//console.log(arguments[2]);

console.log(arguments.callee == fun);
}

//fun("hello",123,true);

function fun2(a , b){
console.log("a = "+a +" , b = "+b);
//console.log(this);
}

/*
* 函数对象的方法:
* call
* apply
* - 当调用函数对象的call和apply时都会导致函数立即执行,
* 就相当于调用了函数一样
* - 如果通过call和apply去调用一个函数,则call和apply中的第一个参数
* 将会是函数中的this
* - 区别:
* call的参数,需要一个一个列出来
* apply的参数,需要封装为一个数组传递
*
*
* this的不同的情况
* - 以函数形式调用,this是window
* - 以方法的形式调用,谁调用方法this就是谁
* - 以构造函数调用,this就是新创建的那个对象
* - 通过call和apply调用时,第一个参数会成为this
*/

var obj = {};

//fun2(123,456);
//在call方法中可以将实参作为call的第二个以后的参数,传递给函数
//fun2.call(obj,1,2);

//apply的参数不能一个一个的传,需要保存到一个数组中统一传递
//fun2.apply(obj , [1 , 2]);

var obj2 = {

name : "沙和尚",
sayName : function(){
console.log(this.name);
}

};

name = "window中的name";

obj2.sayName.call(window);

</script>
</head>
<body>
</body>
</html>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息