5

Crockfordの定義では:

if (typeof Object.create !== 'function') {
    Object.create = function (o) {
        function F() {}
        F.prototype = o;
        return new F();
    };
}

ECMA-262の導入によりObject.create()、新しいオブジェクトの非表示のプロトタイププロパティを設定して、純粋なプロトタイプの継承のためaに別のオブジェクトを指すようになりました。bしかし、それは新しいオブジェクトに限定されており、Javascriptはまだ次のようなものを許可しません

a.__proto__ = b;

aECMA-262Javascript仕様の既存のオブジェクトの場合。それを新しいオブジェクトに制限するが、既存のオブジェクトには制限しない理由はありますか?

4

2 に答える 2

2

MDN__proto__エントリによると、ES6ではオブジェクトのに割り当てることができます[[Prototype]]。以前の記事(2010年10月以降)には、このプロパティは非推奨であると記載されていました。特にそれをサポートしていないブラウザで堅牢に実装することは非常に難しいため、それがWebで役立つようになるまでにはまだ数年かかるでしょう。

__proto__プロパティは、組み込みオブジェクトとそれを含むホストオブジェクトに対して読み取り専用になると思います。

[[Prototype]]なぜプロパティが非表示になり、コンストラクターを介してのみ設定できるのかをBrendan Eichに尋ねる必要がありますが、彼はJavaScriptをシンプルに保ち、に渡されるような悪用を許可したくないのではないかと思いevalます。

Crockfordの場合、オブジェクトのクローンを作成する方法としてLasse Reichstein Nielsenによってbeget最初に公開され、その後ES5Object.createに置き換えられました。clone

于 2012-10-03T01:17:09.390 に答える
1

私が見ることができる理由の1つは、循環参照の可能性を回避することです。

于 2012-10-02T23:01:46.830 に答える