默认情况下,数组没有原型吗?

时间:2011-07-06 21:35:37

标签: javascript arrays methods prototypal-inheritance

我希望能够使用方法扩充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

2 个答案:

答案 0 :(得分:3)

prototype是构造函数的属性,如Array。因此Array.prototype存在,但不存在[1, 2, 3].prototype; Array是构造函数,而[1, 2, 3]是数组。

您正在寻找Object.getPrototypeOf([1, 2, 3])

Object.getPrototypeOfECMAScript 5 method,因此可能不会出现在所有浏览器中。在这种情况下,您可以尝试访问__proto__属性,即[1, 2, 3].__proto__,这是Object.getPrototypeOf是新标准版本的较旧的非标准内容,或者您​​可以使用{{3}确保支持__proto__的地方,Object.getPrototypeOf

答案 1 :(得分:2)

看起来你正在使用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未定义。