函数也是对象,所以函数也有他们的方法!
call()和apply()
1.这两个方法都是函数对象的方法,所以需要通过函数对象来调用
2.当对函数调用call()和apply(),都会调用函数执行
3.在调用call()和apply()可以将第一个对象指定为第一个参数
此时这个对象会成为函数执行时的this
function fun(){
alert('我是fun函数');
}
fun;//函数对象
fun();//函数返回值
所以这里我们用fun.call();
fun.apply();来进行函数对象方法的调用
function fun(){
alert(this);
}
var obj = {};
fun();
//[object window]
fun.call(obj);
//[object,Object]
fun.apply(obj);
//[object,Object]
综上来看这两个方法是用来改变this指向,接着往下看
function fun(a,b){
console.log(a);
console.log(b);
}
fun.call(obj);
//undefined undefined
fun.call(obj,2,3);
fun.apply(obj,[2,3]);
//当函数有参数时,参数obj后面可以跟实参,不同的是,call后面一个一个跟,apply后面需要跟数组
最后总结this的情况:
1.以函数形式调用时,this永远都是window
2.以方法形式调用时,this是调用方法的对象
3.以构造函数的形式调用时,this是新创建的那个对象
4.以call和apply调用时,this是指定的那个对象