JS中的call()
方法和apply()
方法非常类似,两者只有一个区别,就是call()
方法接受的是一个参数列表,而apply()
方法接受的是一个包含多个参数的数组。
例如我们先创建一个add
函数,
function add(c, d) {
return this.a + this.b + c + d;
}
然后创建一个o
对象,
var o = { a: 1, b: 3 };
接下来使用call()
方法,将add
函数被调用时的this
指向o
,
add.call(o, 5, 7);
代码的运行结果是16
。

第一个参数o
是用作this
的对象,其余参数用作函数的参数。
这里我们注意到:call()
方法接受的是多个独立的参数组成的参数列表。
如果我们要用apply()
方法来实现同样的功能,这样写就会报错。

正确的写法应该是:
add.apply(o, [5, 7]);
我们把5
和7
封装成一个数组,这样就不会报错了。

apply()
方法的第一个参数o
是用作this
的对象,这一点和call()
方法相同;不同的是第二个参数是一个数组,数组中的两个成员用作函数参数,这一点和call()
方法有所区别。