1

考虑关注 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" }
    ]
}

尝试planet.cities在 Chrome 调试器窗口中阅读时,我看到了这些附加项目。

在此处输入图像描述

这些是 JavaScript 运行时引擎的一部分吗?不同的浏览器对它们的处理方式不同吗?

4

1 回答 1

3

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

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

于 2012-09-22T19:54:45.777 回答