我正在阅读MDN文档,以更好地理解Javascript。这是来自该文档的摘录。
Object.prototype.objCustom = function() {};
Array.prototype.arrCustom = function() {};
let iterable = [3, 5, 7];
iterable.foo = 'hello';
for (let i in iterable) {
console.log(i); // logs 0, 1, 2, "foo", "arrCustom", "objCustom"
}
在最糟糕的情况下,我认为它会打印0, 1, 2, "foo", "arrCustom"
,但它还会打印objCustom
。
更新:
1)如何可视化从iterable
到Array
一直到Object
的原型链。就像是否有iterable.getParent
方法或iterable.myparent
属性指向其父级一样。
2)为什么不打印数组函数,例如toString
,sort
,它们也位于Array.prototype
上。
3)当某人将某些内容添加到Array.prototype
属性时,我是否需要始终使用hasOwnProperty
。
iterable instanceof Array
/iterable instanceof Object
将显示它们继承自这些对象。如果你不知道一个对象继承自哪里,但想找出来,可以使用Object.getPrototypeOf(iterable)
。 - BergiObject.getPrototypeOf
实现这一点。另请参阅相似的问题。 - BergiObject.getPrototypeOf
直到你到达null
(链的末尾)。请参见第三个重复项以获取示例代码。 - BergiarrCustom
,objCustom
不可枚举吗? - Srinivas