请在javascript中解释apply和call方法

时间:2010-12-13 12:04:22

标签: javascript

  

可能重复:
  What is the difference between call and apply?

申请和通话方法之间的主要区别是什么...... 我浏览网页但无法找到最佳解决方案.. 请帮帮我朋友......

3 个答案:

答案 0 :(得分:6)

除了默认参数外,JavaScript中的每个函数都会收到两个对象。这些是thisargumentsthis的值由它的调用模式决定。 applycall可用于调用函数并为其提供默认的this对象。

这在许多情况下非常有用。例如,arguments是一个类似于数组的对象,但不是真正的Array,它包含所有有用的Array方法。因此,要在slice上应用数组方法arguments,您可以执行以下操作:

Array.prototype.slice.apply(arguments, [1, 2])

如果argumentsArray类型的对象,您可以使用

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