为什么JS原型方法在没有.cal()或.apply()的情况下可以工作?

时间:2019-01-12 08:07:15

标签: javascript prototype

正如我在JavaScript原型中所知道的,对象的方法需要上下文,因此我们应使用callapply来调用它们。

但是,Array.prototype方法可以在不使用callapply的情况下工作。

Array.prototype.concat(1, 2, 3) // [1,2,3]

2 个答案:

答案 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[]相同。但是,如果您有一个类似数组的对象而不是数组,并且要在其上调用某种数组方法,则需要使用callbind

可能最常用的是

Array.prototype.slice.call(arguments)

将函数arguments(不是真正的数组)转换为数组。