call 和 apply 的区别

303 阅读1分钟

Function.prototype.call 和 Function.prototype.apply都是非常常用的方法。他们的作用一模一样,区别仅在于传入参数形式的不同。

apply

apply 接受两个参数,第一个参数制定了函数体内 this 对象的指向,第二个参数为一个带下标的集合,这个集合可以为数组,也可以为类数组,apply 方法吧这个集合中的元素作为参数传递给调用的函数:

var func = function( a, b, c ) {
    alert([ a, b, c ]);
}
func.apply( null, [ 1, 2, 3 ]);

1.这段代码,运行了函数 func, 并且把数组[ 1, 2, 3 ]里面的数作为 func 的参数传进去。
2.将 func 的 this 指向 null,所以 func 指向默认宿主对象 window

call

call传入的参数数量不固定,跟 apply 相似,第一个参数是 this 的指向,区别是从第二个参数开始往后,每个参数被依次传入函数:

var func = function( a, b, c ) {
    alert([ a, b, c ]);
}
func.call(null, 1, 2, 3 );