5

現在のEcmascript6ドラフト(2012年11月)では、__proto__プロパティの公式サポートがあります(セクションB.3.1)。__proto__現在のブラウザの実装では、プロパティが非推奨になっているため、これは少し驚きました。

現在のドラフトが有効な場合、ES6は可変プロトタイプを完全にサポートしますか?Firefoxで現在できる方法で、既存のオブジェクトの新しいプロトタイプを提供できますか?

4

2 に答える 2

8

現在、ミュータブルは__proto__(付録bだけでなく)仕様に含まれるように計画されています。現在の計画では、Object.prototypeにのみ存在し、アクセサー(魔法の部分)として機能する魔法のデータプロパティになる予定です。このプロパティも削除可能になり、削除__proto__時にそのレルムを変更する機能が削除されます。__proto__この説明に従って、ES6仮想マシンhttp://benvie.github.com/continuumに実装しました。

当初は非推奨になり、置き換えられる予定でしたが、その置き換えについてコンセンサスは形成されませんでした。ビルトインから継承する能力が最終目標であり、決定__proto__はすでに広まっていて(つまり、すべてがそれを持っている)、この目標を達成することでした。したがって、抵抗が最も少ない道は、それを受け入れて体系化することでした。

于 2012-12-12T14:14:12.990 に答える
1

Ecmascript 6でリリースされたドキュメントによると、__proto__まだ存在していますが、 BergiMattBrowneが上記のソリューションで指摘したように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を返します。
于 2015-06-24T06:21:13.780 に答える