Do数组默认没有原型

Do arrays have no prototype by default?

本文关键字:原型 默认 数组 Do      更新时间:2023-09-26

我希望能够增加Array.prototype的方法,然后在任何数组上调用它们:

>>> [1, 2, 3].customMethod();

但似乎数组没有原型…?

>>> [1, 2, 3].prototype
undefined

我错过了什么吗?


看来我的实际问题在于别处:调用[1, 2, 3].customMethod()工作,但调用someDomElement.childNodes.customMethod()失败。childNodes不是一个真正的数组吗?

childNodes.filter is not a function

prototype是与Array类似的构造函数的属性。所以Array.prototype存在,但[1, 2, 3].prototype不存在;Array是构造函数,而[1, 2, 3]是数组。

您要找的是Object.getPrototypeOf([1, 2, 3])

Object.getPrototypeOf是一个ECMAScript 5方法,因此可能不是在所有浏览器中都存在。在这种情况下,您可以尝试访问__proto__属性,即[1, 2, 3].__proto__,这是一个较旧的,非标准的东西,Object.getPrototypeOf是新的标准版本,或者您可以使用ES5 shim来确保支持__proto__的地方,也支持Object.getPrototypeOf

看起来你正在使用一个DOM NodeList,这与JavaScript数组对象不同。

http://blog.duruk.net/2011/06/19/nodelists-and-arrays-in-javascript/应该提供一些见解。

要从类数组对象(如NodeListarguments变量)中获得"真正的"javascript数组,使用.slice方法,如下所示:

var realArray = Array.prototype.slice.call(someDomElement.childNodes);
realArray.filter()

是的,就像另一个答案表明的那样——.prototype对象只是构造函数的属性——而不是实例的属性。如。Object.prototype存在,但({}).prototype未定义