考虑以下JavaScript对象
var planet = {
id: 1001,
Name: "Mars",
faction: {
factionId: 2,
notification: function () {
document.write("Mars notified");
}
},
cities: [
{ locationId: 15, name: "Gladius" },
{ city: "MyPlanet", geo: "universal" }
]
}当我试图在Chrome Debugger窗口中读取planet.cities时,我看到了这些额外的项目。

这些是JavaScript运行时引擎的一部分吗?不同的浏览器对它们的处理方式是否有所不同?
发布于 2012-09-23 03:54:46
每个JavaScript都有一个它继承的原型对象(EcmaScript §4.2.1)。这通常被称为“内部[[prototype]]属性”(EcmaScript §8.6.2)。FF和Chrome将其公开为非标准(和不推荐)的__proto__ property是特定于实现的。
您看到的这些附加属性位于Object.prototype (EcmaScript §15.2.4,MDN)上,所有普通对象--以及您的对象文字--都继承自这些属性。同样,双下划线属性是特定于实现的,现在已被属性描述符弃用(请参阅Object.defineProperty at MDN)。
https://stackoverflow.com/questions/12547187
复制相似问题