简介:
这两个方法都是函数对象的方法,需要通过函数对象来调用,当函数调用call()和apply()都会调用函数执行。在调用call()和apply()可以将一个对象指定为第一个参数,此时这个对象将会成为函数执行的this。
作用:
call()方法和apply()方法的作用相同:改变this指向。
区别:
他们的区别在于接收参数的方式不同。
call的语法:函数名.call(obj,参数1,参数2,参数3……);
apply的语法:函数名.apply(obj,[参数1,参数2,参数3……]);(哪怕只有一个参数也要用数组)
示例代码:
function fun(a,b)
{
//alert("我是fun函数");
//alert(this.name);
console.log("a="+a);
console.log("b="+b);
console.log(this.name);
}
var obj=
{
name:"张恒",
sayName:function()
{
alert(this.name);
}
};
var obj2=
{
name:"666",
sayName:function()
{
alert(this.name);
}
};
fun.call(obj,2,3);
fun.apply(obj2,[2,3]);
结果:
function add(c, d){
return this.a + this.b + c + d;
}
var obj = {a:1, b:3};
add.call(obj, 5, 7); // 1 + 3 + 5 + 7 = 16
add.apply(obj, [10, 20]); // 1 + 3 + 10 + 20 = 34