現在のEcmascript6ドラフト(2012年11月)では、__proto__
プロパティの公式サポートがあります(セクションB.3.1)。__proto__
現在のブラウザの実装では、プロパティが非推奨になっているため、これは少し驚きました。
現在のドラフトが有効な場合、ES6は可変プロトタイプを完全にサポートしますか?Firefoxで現在できる方法で、既存のオブジェクトの新しいプロトタイプを提供できますか?
現在のEcmascript6ドラフト(2012年11月)では、__proto__
プロパティの公式サポートがあります(セクションB.3.1)。__proto__
現在のブラウザの実装では、プロパティが非推奨になっているため、これは少し驚きました。
現在のドラフトが有効な場合、ES6は可変プロトタイプを完全にサポートしますか?Firefoxで現在できる方法で、既存のオブジェクトの新しいプロトタイプを提供できますか?
現在、ミュータブルは__proto__
(付録bだけでなく)仕様に含まれるように計画されています。現在の計画では、Object.prototypeにのみ存在し、アクセサー(魔法の部分)として機能する魔法のデータプロパティになる予定です。このプロパティも削除可能になり、削除__proto__
時にそのレルムを変更する機能が削除されます。__proto__
この説明に従って、ES6仮想マシンhttp://benvie.github.com/continuumに実装しました。
当初は非推奨になり、置き換えられる予定でしたが、その置き換えについてコンセンサスは形成されませんでした。ビルトインから継承する能力が最終目標であり、決定__proto__
はすでに広まっていて(つまり、すべてがそれを持っている)、この目標を達成することでした。したがって、抵抗が最も少ない道は、それを受け入れて体系化することでした。
Ecmascript 6でリリースされたドキュメントによると、__proto__
まだ存在していますが、 BergiとMattBrowneが上記のソリューションで指摘したようにObject.setPrototypeOf
、の変更バージョンであるを使用できます__proto__
。
setPrototypeOf関数が引数Oおよびprotoを指定して呼び出されると、次の手順が実行されます。
- OをRequireObjectCoercible(O)とします。
- ReturnIfAbrupt(O)。
- Type(proto)がObjectでもNullでもない場合、TypeError例外をスローします。
- Type(O)がObjectでない場合は、Oを返します。
- ステータスをO.[SetPrototypeOf]とします。
- ReturnIfAbrupt(ステータス)。
- ステータスがfalseの場合、TypeError例外をスローします。
- Oを返します。