call() 和 apply()
1、这两个方法都是
函数对象
的方法,需要通过函数对象
来调用
2、当对函数调用call()和apply()都会调用函数执行
3、在调用call()和apply()时,可以将一个对象指定为第一个参数 此时这个对象将会成为函数执行时的this
4、call()方法可以将实参在对象之后依次传递
5、apply()方法需要将实参封装到一个数组中统一传递
<script>
function fun(a,b){
//alert('我是fun函数');
// alert(this);
console.log(a,b);
}
// var obj={};
// fun();
// fun.call();
// fun.apply();
// fun.call(obj);//'我是fun函数'
// fun();//window
// fun.call(obj);//object
// fun.apply(obj);//object
var obj={
name:'obj',
sayName:function(){
alert(this.name);
}
};
var obj2={
name:'obj2'
};
//obj.sayName();//obj
//obj.sayName.apply(obj2);//obj2 //参数是谁this就是谁
//fun.call(obj,2,3); //2,3
fun.apply(obj,[2,3]); //2,3
</script>
总结:this的情况
1、以函数形式调用时, this永远都是window
2、以方法的形式调用时 this是调用方法的对象
3、以构造函数的形式调用时,this是新创建的那个对象
4、使用call和apply调用时,this是指定的那个对象