正如我在JavaScript原型中所知道的,对象的方法需要上下文,因此我们应使用call
或apply
来调用它们。
但是,Array.prototype
方法可以在不使用call
或apply
的情况下工作。
Array.prototype.concat(1, 2, 3) // [1,2,3]
答案 0 :(得分:1)
示例中的上下文已经存在。它是Array.prototype
。
我们记得上下文是点之前的对象:
您的示例我们可以这样重写,并给出相等的结果:
console.log([].concat.call(Array.prototype,[1,2,3]))
答案 1 :(得分:0)
是的,但是当您将上下文传递给它时也可以使用
const arr = Array.prototype.concat.call([],1,2,3);
console.log(arr);
没有什么区别,只是因为Array.prototype
与[]
相同。但是,如果您有一个类似数组的对象而不是数组,并且要在其上调用某种数组方法,则需要使用call
或bind
。
可能最常用的是
Array.prototype.slice.call(arguments)
将函数arguments
(不是真正的数组)转换为数组。