我希望能够使用方法扩充 Array.prototype
,然后在任何数组上调用它们:
>>> [1, 2, 3].customMethod();
但数组似乎没有原型(prototype)......?
>>> [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 method ,因此可能不会出现在所有浏览器中。在这种情况下,您可以尝试访问 __proto__
属性,即 [1, 2, 3].__proto__
,它是 Object. getPrototypeOf
是新的标准版本,也可以使用an ES5 shim以确保凡是支持 __proto__
的地方,都支持 Object.getPrototypeOf
。
关于javascript - 默认情况下数组没有原型(prototype)吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6603313/