Do数组默认没有原型
Do arrays have no prototype by default?
我希望能够增加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/应该提供一些见解。
要从类数组对象(如NodeList
或arguments
变量)中获得"真正的"javascript数组,使用.slice
方法,如下所示:
var realArray = Array.prototype.slice.call(someDomElement.childNodes);
realArray.filter()
是的,就像另一个答案表明的那样——.prototype
对象只是构造函数的属性——而不是实例的属性。如。Object.prototype
存在,但({}).prototype
未定义
- 用嵌套函数和默认函数定义函数
- 使用“;这个“;JavaScript原型方法中的关键字
- 如何使用铁流星与流星的默认路线
- 防止Alt+Shift默认操作或检测多种操作系统语言的Javascript
- 引用类变量中的原型方法
- CKeditor:更改对话框中的默认选择选项
- 在不阻止默认行为的情况下检测IE10中的缩放
- 如何从对象的原型方法访问JavaScript对象属性
- 为什么要包装每一个原型“;类“;JS中具有匿名函数的对象
- 如何从外部页面激活非默认引导选项卡
- 防止默认锚点行为AngularJS
- 我的shareService在angular 2中发送值工作正常,但当我渲染我的另一个组件时,会获得默认值
- jpm的默认Firefox路径没有'不起作用
- jquerydatetimepicker日期和时间应在框默认值中,而无需单击框
- 在JavaScript中,函数的默认值是多少'的原型属性
- 原型上具有默认属性的es6类在traceur中抛出
- 为什么原型函数40x比默认声明的函数慢
- 如何从一个没有原型的对象中创建一个带有默认原型的JS对象
- Do数组默认没有原型
- 如何合并原型对象中的默认选项