JS中的call()和apply()方法的区别

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]);

我们把57封装成一个数组,这样就不会报错了。

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