申请和通话方法之间的主要区别是什么...... 我浏览网页但无法找到最佳解决方案.. 请帮帮我朋友......
答案 0 :(得分:6)
除了默认参数外,JavaScript中的每个函数都会收到两个对象。这些是this
和arguments
。 this
的值由它的调用模式决定。 apply
或call
可用于调用函数并为其提供默认的this
对象。
这在许多情况下非常有用。例如,arguments
是一个类似于数组的对象,但不是真正的Array
,它包含所有有用的Array方法。因此,要在slice
上应用数组方法arguments
,您可以执行以下操作:
Array.prototype.slice.apply(arguments, [1, 2])
如果arguments
是Array
类型的对象,您可以使用
arguments.slice(1, 2)
call
只不过是修改后的应用版本。请参阅elusive的评论。
Mr.Douglus Crockford在此视频中对JavaScript函数进行了很好的介绍:Function the Ultimate。
答案 1 :(得分:4)
主要区别在于call
接受一个参数列表,其中第一个参数后面的参数直接传递给方法:
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);
}
答案 2 :(得分:3)
.apply()
和.call()
非常相似。唯一的区别是它们如何将参数传递给被调用的函数。 .apply()
采用一组参数,而.call()
可以像常规函数调用一样使用:
someFunction.apply(context, [argument1, argument2]);
相当于:
someFunction.call(context, argument1, argument2);