考虑使用以下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调试器窗口中阅读planet.cities
时,我会看到这些附加项目。
这些是JavaScript Runtime引擎的一部分,并且不同的浏览器会以不同的方式处理它们吗?
答案 0 :(得分:3)
每个JavaScript都有一个原型对象,它从中继承(EcmaScript §4.2.1)。这通常被称为“内部[[prototype]]
属性”(EcmaScript §8.6.2)。由于非标准(并且已弃用)__proto__
property是特定于实现的,因此FF和Chrome会将其公开。
您看到的这些附加属性位于Object.prototype
(EcmaScript §15.2.4,MDN)上,所有普通对象(以及您的对象文字)都从该属性继承。同样,双下划线属性是特定于实现的,现在已被属性描述符弃用(请参阅Object.defineProperty
at MDN)。