我希望能够使用方法扩充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
答案 0 :(得分:3)
prototype
是构造函数的属性,如Array
。因此Array.prototype
存在,但不存在[1, 2, 3].prototype
; Array
是构造函数,而[1, 2, 3]
是数组。
您正在寻找Object.getPrototypeOf([1, 2, 3])
。
Object.getPrototypeOf
是ECMAScript 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/应提供一些见解。
要从类似数组的对象(例如NodeList
或arguments
变量)获取“真实”javascript数组,请使用.slice
方法,如下所示:
var realArray = Array.prototype.slice.call(someDomElement.childNodes);
realArray.filter()
是的,就像另一个答案所示 - .prototype
对象只是构造函数的一个属性 - 而不是实例。例如。 Object.prototype
存在,但({}).prototype
未定义。