2012-10-07 23 views
3

我不知道为什么即使在Javascript权威指南第6版,O'Reilly,p. 149 - 150,它仍然使用Array.join()Array.concat()。应该是Array.prototype.join()而不是?在Javascript中,是否Array.join真的是Array.prototype.join?

虽然Chrome没有定义Array.join,但Firefox确实可以,但可以通过Array.join(array, string)调用。由于一个是类方法,另一个是实例方法,所以差异可能很重要。我不知道这是为什么?

该书保持在即使在核心JavaScript参考文档使用Array.join,但也许这意味着Array.prototype.join,而且,它似乎表明,Arraylength属性,但它确实也应该是Array.prototype一个属性,是Array.prototype.length

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

Array.prototype.join = function(s) { 
    return Array.join(this, s); 
} 

,但我没有看到通常正在做(定义一个类的方法,可以在一个实例调用)。

+0

方法在原型上定义但是在“类”上执行的情况不是这种情况吗? –

+0

如果你的意思是'[] .join',那么它就是原型。 'Array.join'的确有误导性。我也看到了'Array#join'作为这种方法的符号。 – pimvdb

+1

我认为这只是O'Reilly方面的表示法/术语的一个错误选择。该部分的介绍明确指出所讨论的方法在原型对象上;但是,出于某种原因,他们会使用不正确的方式来指示您注意到的情况。 – Pointy

回答

1

FireFox将的原型方法版本放在相关的构造函数中。

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

这本书应该有所作为,除非本书特别谈论JavaScript扩展。

请记住JavaScript!== ECMAScript。 ECMAScript是语言标准,JavaScript是该标准的第3版的实现,并且包括未由标准规定的功能的超集。

相关问题