了解JavaScript运行时

时间:2012-09-22 19:52:01

标签: javascript dom

考虑使用以下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时,我会看到这些附加项目。

enter image description here

这些是JavaScript Runtime引擎的一部分,并且不同的浏览器会以不同的方式处理它们吗?

1 个答案:

答案 0 :(得分:3)

每个JavaScript都有一个原型对象,它从中继承(EcmaScript §4.2.1)。这通常被称为“内部[[prototype]]属性”(EcmaScript §8.6.2)。由于非标准(并且已弃用)__proto__ property是特定于实现的,因此FF和Chrome会将其公开。

您看到的这些附加属性位于Object.prototypeEcmaScript §15.2.4MDN)上,所有普通对象(以及您的对象文字)都从该属性继承。同样,双下划线属性是特定于实现的,现在已被属性描述符弃用(请参阅Object.defineProperty at MDN)。