js函数中call()与apply()的区别:
-
这两个方法都是函数对象的方法,需要通过函数对象来调用
-
当对函数调用call()和apply()都会调用函数执行。
-
在调用call()和apply()可以将一个对象指定为第一个参数。此时这个对象将会成为函数执行的this。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>if</title>
<script>
function fun(){
alert(this.name);
}
//作用相同
// fun();
// fun.call();
// fun.apply();
var obj={
name:"第一个人",
sayName:function(){
alert(this.name);
}
};
var obj2={name:"第二个人"};
//作用相同,显示对象的name属性值
// fun.call(obj);
// fun.call(obj2);
// fun.apply(obj);
obj.sayName.apply(obj2);
</script>
</head>
<body>
</body>
</html>
运行出现弹窗显示 第二个人
-
- call()方法可以将实参在对象之后依次传递。
- apply()方法需要将实参封装到一个数组中统一传递
function fun(a,b){
console.log("a="+a);
console.log("b="+b);
}
var obj={
name:"obj",
sayName:function(){
alert(this.name);
}
}
fun.call(obj,2,3);
fun.apply(obj,[2,3]);
控制台输出打印 a=2,b=3
this代表的值
- 以函数的形式调用,this永远都是window。
- 以方法的形式调用的时候,this永远是方法的对象
- 以构造函数的形式调用时,this是新创建的那个对象
- 使用call和apply调用时,this是指定的那个对象。