3

我希望能够增加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
4

2 回答 2

3

prototype是构造函数的属性,例如Array. 所以Array.prototype存在,但不是[1, 2, 3].prototypeArray是构造函数,while[1, 2, 3]是数组。

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

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

于 2011-07-06T21:37:36.043 回答
2

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

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

要从类似数组的对象(例如 aNodeListarguments变量)中获取“真实的”javascript 数组,请使用该.slice方法,如下所示:

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

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

于 2011-07-06T21:54:32.203 回答