ECMAScript仕様を理解する 第4部
ウェブの他の部分では
Jason Orendorff氏がMozillaからJS文法の特異性に関する深い分析を公開しました。実装詳細は異なるものの、どのJSエンジンもこれらの特異性に同じ課題を抱えています。
Jason Orendorff氏がMozillaからJS文法の特異性に関する深い分析を公開しました。実装詳細は異なるものの、どのJSエンジンもこれらの特異性に同じ課題を抱えています。
仕様を読むスキルをさらに練習しましょう。まだ前回のエピソードを見ていない場合は、今がそれを確認する良いタイミングです!
仕様を知る楽しみな方法として、まずJavaScriptの機能を選び、それがどのように仕様化されているかを調べます。
警告!このエピソードには、2020年2月時点のECMAScript仕様からコピーされたアルゴリズムが含まれています。これらはいずれ古くなります。
プロパティがプロトタイプチェーンで検索されることは知っています: オブジェクトが読もうとしているプロパティを持っていない場合、プロトタイプチェーンを検索し続け、プロパティが見つかるか、それ以上プロトタイプを持たないオブジェクトに達するまで探索します。
例えば:
const o1 = { foo: 99 };
const o2 = {};
Object.setPrototypeOf(o2, o1);
o2.foo;
// → 99
この動作がどこで定義されているかを見つけてみましょう。始めるのに良い場所はオブジェクト内部メソッドのリストです。
[[GetOwnProperty]]
と[[Get]]
の両方がありますが、自身のプロパティに制限されないバージョンを探しているので、[[Get]]
を選びます。
残念ながら、プロパティ記述子仕様型にも[[Get]]
というフィールドがあります。そのため、仕様を[[Get]]
のために閲覧する際には、この二つの独立した使用法を慎重に区別する必要があります。
この記事では、仕様内の簡単な関数を取り上げ、その記法を理解しようとします。さあ、始めましょう!
JavaScriptを知っていても、その言語仕様であるECMAScript Language specification、略してECMAScript仕様を読むのは非常に気が重い場合があります。少なくとも初めて読んだときはそう感じました。