JavaScript中如何同时使用Call和Apply方法

4
我知道JavaScript中的callapply,但它们之间的区别是什么呢?另外,我发现一些代码同时使用这两种方法,如下所示:
  function doSomething() {
    return Function.prototype.call.apply(Array.prototype.slice, arguments);
}

“are”和“is”是相同的意思。

Array.prototype.slice.apply(arguments)

为什么我们想要同时使用call和apply?


1
已经在这里回答了:https://dev59.com/_nI-5IYBdhLWcg3wKVA9[1] - mez
你可以在这里找到答案: https://dev59.com/3GnWa4cB1Zd3GeqP5OMX#13004493 - Deepak
2个回答

4
不,它们不一样。Array.prototype.slice.apply(arguments) 在当前的argument对象上应用了slice函数,而Function.prototype.call.apply(Array.prototype.slice, arguments);在提供作为第一个参数的数组上调用了slice函数。
也许新的EcmaScript语法会使这样的事情变得更容易。你的doSomething等同于
function doSomething(array, ...)
    array.slice(...); // assuming array is really an array
}

第二个与第一个等价。
function (...) {
    arguments.slice(); // assuming argument objects are actual arrays
}

所以这个语句等同于Array.prototype.slice.call(arguments[0], arguments[1], ...); - I am Andy

1

传递相同内容

Array.prototype.slice.apply(arguments)

是的,我也认为是一样的..!!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接