一、call()与apply()是什么
两个都是函数对象的方法,当调用这两个方法时都会执行这个函数
如果不懂函数的方法看这个
二、call()与apply()的作用共同点
- 1.传入的第一个参数是对象
- 2.改变this指针指向,复用已有方法,传入哪个对象,this指哪个对象
- 3.都可以利用第一个之后的参数传实参
举例说明前两个共同点
<script type="text/javascript">
//创建一个对象
obj={
name:"obj",
sayname:function(){
alert(this.name);
}
};
obj1={
name:"obj1"
};
obj.sayname.apply(obj1);//输出obj1
obj.sayname.call(obj1);//输出obj1
</script>
第一个共同点:从传参来看,call与apply的第一个参数是一个对象
第二个共同点:从输出结果可以看出,alert方法中this是obj1,这便是通过call与apply方法改变了this的指向,从指向obj变成指向obj1。this指向博客
原本obj1中没有sayname方法,通过call与apply方法复用了obj的方法。
第三个共同点放到区别中去说
三、call()与apply()的区别
区别:都可以利用第一个之后的参数传实参,传实参的形式不同
- call()方法可以将实参在对象之后依次传递
- apply()方法需要将实参分装到一个数组中统一传递
举例说明
<script type="text/javascript">
function fun(a,b){
console.log("a="+a);
console.log("b="+b);
}
obj2={
name:"obj2"
};
fun.call(obj2,1,2);//输出a=1,b=2
fun.apply(obj2,[1,2]);//输出a=1,b=2
</script>
fun.call(obj2,1,2);//输出a=1,b=2
fun.apply(obj2,[1,2]);//输出a=1,b=2
从这两行就可以看出,apply传参需要放到数组中
四、总结
call()与apply()的作用共同点
- 1.传入的第一个参数是对象
- 2.改变this指针指向,复用已有方法,传入哪个对象,this指哪个对象
- 3.都可以利用第一个之后的参数传实参
区别
- 传实参的形式不同,apply方法统一放到数组中