可能是重复问题:
call和apply有什么区别?
apply和call方法的主要区别是什么?我在网上查找了很久,但无法找到最佳解决方案。请帮助我,朋友们...
可能是重复问题:
call和apply有什么区别?
apply和call方法的主要区别是什么?我在网上查找了很久,但无法找到最佳解决方案。请帮助我,朋友们...
this
和 arguments
。 this
的值由其调用模式决定。可以使用 apply
或 call
来调用函数并提供一个默认的 this
对象。arguments
是一个类似数组的对象,但不是具有所有有用的数组方法的 Array
。因此,要在 arguments
上应用一个数组方法 slice
,可以这样做:Array.prototype.slice.apply(arguments, [1, 2])
如果arguments
是一个Array
类型的对象,你可以使用以下方法:
arguments.slice(1, 2)
call
只是 apply
的一个修改版本。请参考 elusive 的评论。
Douglas Crockford 在这个视频中给出了非常好的 JavaScript 函数介绍:函数的终极。
arguments
зљ„е†…е®№жњ‰д»Ђд№€з›ёе…іжЂ§пјџ - Tim Downcall
接受参数列表,第一个参数后的参数直接传递给方法:myFunc.call(thisObj, arg1, arg2, arg3);
apply
方法只接受两个参数,第一个是 this
对象,第二个是要传递给方法的参数数组:
myFunc.apply(thisObj, [arg1, arg2, arg3]);
apply
经常用于需要将包含当前函数传递的参数列表的 arguments
对象传递给另一个方法的情况:
function myOtherFunc(arg1, arg2, arg3) {
if (typeof arg1 == "object" && arg1 !== null)
myFunc.apply(this, arguments);
}
apply
可以在你能想到的任何地方代替 call
。然而,call
不是 apply
的很好替代品,因为它不够动态。我已经更新了我的答案,给你一个使用 apply
的例子。 - Andy Ecall
只是apply
的语法糖。这使得使用仅有一个参数的函数更容易调用。 - Felix Kling.apply()
和 .call()
非常相似。唯一的区别在于它们如何将参数传递给被调用的函数。.apply()
接受一个参数数组,而 .call()
可以像普通函数调用一样使用:
someFunction.apply(context, [argument1, argument2]);
等同于:
someFunction.call(context, argument1, argument2);