我有以下代码
var person={
firstname:"Geet",
getFullName:function(){
return this.firstname;
}
}
var test={
firstname:"Test"
}
test.__proto__=person;
for (var prop in test){
console.log(prop + ': '+test[prop]);
}
输出: -
firstname: Test
getFullName: function (){
return this.firstname;
}
链条是如何停在那里的。为什么它不打印 proto 对象的属性。如何处理。
答案 0 :(得分:1)
您根本不应该使用__proto__
,请参阅MDN Object.prototype.__proto__
。
for..in 仅迭代对象及其[[Prototype]]
链的可枚举属性。因此,您可以直接在 test 上获取 firstname 。然后 getFullName 位于 person 上。
你没有得到 person.firstname 它已经被粉碎了#34;"通过 test 上的 firstname 属性。就是这样,[[Prototype]]
链上的剩余对象上没有更多可枚举的属性,即 Object.prototype 和 null 。
如果您希望看到__proto__
属性,则无法枚举,请参阅ECMA-262 B.2.2.1 Object.prototype.__proto__
。