ECMAScriptの内部プロパティは何のために定義されていますか? スペックとはどういう意味ですか
この仕様では、さまざまな内部プロパティを使用して、オブジェクト値のセマンティクスを定義します。これらの内部プロパティは、ECMAScript 言語の一部ではありません。それらは、純粋に説明目的でこの仕様によって定義されています。
ECMAScript で定義された内部プロパティはプログラミングに使用できないということですか。それらは、javascript エンジンの実装で使用されますか?
ECMAScriptの内部プロパティは何のために定義されていますか? スペックとはどういう意味ですか
この仕様では、さまざまな内部プロパティを使用して、オブジェクト値のセマンティクスを定義します。これらの内部プロパティは、ECMAScript 言語の一部ではありません。それらは、純粋に説明目的でこの仕様によって定義されています。
ECMAScript で定義された内部プロパティはプログラミングに使用できないということですか。それらは、javascript エンジンの実装で使用されますか?
内部プロパティは、実行時のコードの動作を定義しますが、コードからアクセスすることはできません。ECMAScript は、JavaScript のオブジェクトの多くの内部プロパティを定義します。内部プロパティは、二重角括弧表記で示されます。
たとえば、JavaScript 関数はオブジェクトであり、[[call]] プロパティを持ちます。[[call]] プロパティは関数固有です。
別の内部プロパティの例は [[prototype]] プロパティです。このプロパティは、インスタンスが使用しているプロトタイプ オブジェクトを指すポインタです。コードを介して内部プロパティにアクセスできないため、オブジェクトのインスタンス化は、そのプロパティがすべてオブジェクトで使用可能である間、プロトタイプにアクセスできません。[[prototype]] プロパティの値は、オブジェクトの Object.getPrototypeOf() メソッドを使用して取得できます。
var obj = new Object();
var prototype = Object.getPrototypeOf(obj);
console.log(prototype == Object.prototype);
ECMAScript で定義された内部プロパティはプログラミングに使用できないということですか。それらは、javascript エンジンの実装で使用されますか?
はい。それらは実装のみを目的としており、「実名」は必要ありません。#8.6.2 オブジェクトの内部プロパティとメソッドでそれについて読むことができます。
よく使用される例は、内部プロパティ [[prototype]] です。すべてのオブジェクトには 1 つがありますが、直接アクセスすることはできません。
function foo(){
this.first = "hi"
this.second = something
}
foo.prototype = {
constructor : foo,
anotherProp : "hello"
}
var obj = new foo();
console.log(obj.anotherProp); //hello
//here the runtime will look in obj for anotherProp and
//fail to find it so it will look in obj's internal property
//[[prototype]] which is pointing to the object foo.prototype
そのため、内部プロパティ [[prototype]] が指しているオブジェクトにアクセスできますが、内部 [[prototype]] プロパティを介して直接アクセスすることはできません。これは、プログラマではなくランタイムのみが使用するためのものです。
これらは、JavaScript エンジンの実装方法の例で使用されます。