call()和apply(), 这两个方法是函数对象的方法,需要通过函数对象来调用,当函数用call()和apply()都会调用函数执行。
function fun(){
alert("我是fun方法");
}
fun.call();
fun.apply();
var obj = {};
在调用call()和apply()时,可以将一个对象指定为第一个参数,这个对象将会成为函数执行时的this。
function fun(){
alert(this);
}
//声明一个对象
var obj = {};
fun.call(obj); //这样调用函数时,上面函数中的this就是对象obj,apply()和call()的用法一样
fun.call(obj2); //此时上面函数中的this就是obj2
call()方法可以将实参在对象之后依次传递,apply()方法中需要将实参封装到一个数组中统一传递
function fun(a,b){
console.log("a = "+ a);
console.log("b = "+ b);
alert(this);
}
//声明一个对象
var obj = {};
fun.call(obj,1,2); //在对象之后紧跟的就是实参1,2。
fun.apply(obj,[1,2]);//将实参封装到一个数组中传递
-
this的情况。
1.以函数形式调用时,this永远都是window2.以方法的形式调用时.this是调用方法的对象,谁调用方法,this就是谁
3.以构造函数的形式调用时,this是新创建的那个对象4.使用call和apply调用时,this是指定的那个对象