在Javascript中,Array.join真的是Array.prototype.join吗?

在Javascript中,Array.join真的是Array.prototype.join吗?,javascript,Javascript,我想知道为什么即使在第六版Javascript权威指南中,O'Reilly仍然继续使用Array.join()或Array.concat()。应该改为Array.prototype.join() 但是,虽然Chrome没有定义Array.join,但Firefox确实定义了,并且可以通过Array.join(Array,string)调用它。区别可能很重要,因为一个是类方法,另一个是实例方法。我想知道这是为什么 这本书甚至在核心Javascript参考文档中也一直使用Array.join,但可能

我想知道为什么即使在第六版Javascript权威指南中,O'Reilly仍然继续使用
Array.join()
Array.concat()
。应该改为
Array.prototype.join()

但是,虽然Chrome没有定义
Array.join
,但Firefox确实定义了,并且可以通过
Array.join(Array,string)
调用它。区别可能很重要,因为一个是类方法,另一个是实例方法。我想知道这是为什么

这本书甚至在核心Javascript参考文档中也一直使用
Array.join
,但可能它的意思是
Array.prototype.join
,而且,它似乎暗示
Array
有一个
length
属性,但它实际上也应该是
Array.prototype
的一个属性,并且是
数组.prototype.length

顺便说一句,Firefox实现的
Array.prototype.join
似乎可以

Array.prototype.join = function(s) {
    return Array.join(this, s);
}
但是我看不到通常会这样做(定义一个可以在实例上调用的类方法)。

FireFox在相关构造函数上放置了一个原型方法版本

这不是ECMAScript标准的一部分,而是ECMAScript特定JavaScript超集的一部分

这本书应该做出区分,除非这本书专门讨论JavaScript扩展


请记住,JavaScript!==ECMAScript。ECMAScript是语言标准,JavaScript是该标准第三版的一个实现,包括标准中未指定的功能超集。

方法不是在原型上定义的,而是在“类”上执行的吗?如果你的意思是
[].join
,那么它就是原型
Array.join
确实有误导性。我还看到了
Array#join
作为此类方法的符号。我认为这只是O'Reilly在符号/术语方面的错误选择。该部分的导言明确指出,所讨论的方法是在原型对象上的;然而,由于某些原因,他们使用了不正确的方式来表示这一点,正如您所注意到的。