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.citiesChrome Debugger ウィンドウで読み込もうとすると、これらの追加項目が表示されます。

ここに画像の説明を入力

これらは JavaScript ランタイム エンジンの一部であり、ブラウザによって処理方法が異なりますか?

4

1 に答える 1

3

すべての JavaScript には、継承元のプロトタイプ オブジェクトがあります ( EcmaScript §4.2.1 )。これは通常、「内部[[prototype]]プロパティ」と呼ばれます ( EcmaScript §8.6.2 )。その FF と Chrome は、非標準 (および非推奨)の__proto__プロパティが実装固有であるため、公開します。

表示されるこれらの追加のプロパティはObject.prototype( EcmaScript §15.2.4MDN ) にあり、そこからすべてのプレーン オブジェクト (つまりオブジェクト リテラル) が継承されます。繰り返しになりますが、二重アンダースコア プロパティは実装固有であり、プロパティ記述子によって非推奨になりました ( Object.definePropertyMDNを参照)。

于 2012-09-22T19:54:45.777 に答える