9

これは標準に準拠しておらず、IE はそれをサポートしていませんが、どうやら__proto__プロパティを使用することは依然としてプロトタイプ チェーンを操作する主な方法です。コンストラクターを使用して継承を構築することもできますが、これは、プロパティまたは標準準拠の関数newと比較して、不要な複雑さのように思えます。__proto__Object.getPrototypeOf

編集:

回答で述べたように、この方法は現在存在します(ES6標準)。ただし、パフォーマンスに関する警告に注意してください: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf

4

2 に答える 2

10

これは ES6 ハーモニー ドラフトの一部です。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/setPrototypeOf

現在、Chrome の最新リリースで使用しています。

var proto = {
    foo: 'bar'
};

var object = {};

Object.setPrototypeOf(object, proto);

console.assert(object.foo == 'bar');
于 2014-10-17T19:37:48.733 に答える
2

ブレンダン・アイヒここでこう言っています:

Object.setPrototypeOf は発生しません。書き込み可能な __proto__ は、実装するのが非常に面倒で (サイクルチェックのためにシリアル化する必要があります)、あらゆる種類の型混乱の危険を生み出します。低レベルのシャープな楽器として欲しいと思うかもしれません。JSはその言語ではありません。クラスと mixin の高レベルのフォームははるかに優れているように見え、そのような鋭いエッジは含まれません。

于 2012-07-01T12:23:32.113 に答える