以下の視覚化では、
以下の構文で作成された2つの配列オブジェクト(cars
&bikes
)があります。
var cars = new Array("Saab", "Volvo", "BMW");
var bikes = ["Honda", "Yamaha"];
[[Class]]
プロパティ値はArray
です。
さらに、以下に示すように、完全に機能する配列であるArray.prototype
もあります。
> Object.prototype.toString.call(Array.prototype);
"[object Array]"
> Array.prototype[0] = "Volvo";
"Volvo"
> Array.prototype[1] = "BMW";
"BMW"
> Array.prototype.length;
2
一般に、prototype
に何かを置くと、オブジェクトのすべてのインスタンスが同じプロパティを共有します。
質問:
length
プロパティをメンバーとして、Array.prototype
が完全に機能する配列の背後にあるアイデアは何ですか?
オブジェクトが配列として機能するために必要なすべての機能を含む必要があるため、配列プロトタイプ自体は完全に機能する配列です。配列インスタンスは、プロトタイプを通じてすべての機能を継承します。
スペック によると:
Arrayプロトタイプオブジェクトはそれ自体が配列です。その[[Class]]は「配列」であり、長さプロパティ(初期値は+0)と、14.5.5.1で説明されている特別な[[DefineOwnProperty]]内部メソッドがあります。