5
4

1 に答える 1

9

prototypeの元のオブジェクトをfプレーンなオブジェクトに完全に置き換えたからです。プロパティを介して参照を保持していたのは元のprototypeオブジェクトでした。f.constructor

オブジェクト リテラル構文を使用して作成されたオブジェクトのコンストラクターがコンストラクターになりObjectます。

元に戻すには、手動でそこに置く必要があります。

f = function() {};
f.prototype = {};
f.prototype.constructor = f;
thing = new f;

.constructorこれにより、新しいプロトタイプ オブジェクトのプロトタイプ チェーンでプロパティがシャドウされます。

そのプロパティを削除すると、Object再び取得されます。

delete f.prototype.constructor;

console.log(thing.constructor); // Object
于 2012-09-12T19:29:12.790 に答える