関数が呼び出されたときに、プロトタイプのプロパティを自分自身に設定する必要があるJS仕様のどこにも見つかりません。new
constructor
確かに、仕様には、組み込みコンストラクター (オブジェクト、配列、文字列、&c) がすべてprototype.constructor
プロパティを自分自身に設定しObject.prototype.constructor = Object
ていると書かれています (つまり)。[[Construct]]
セクション(13.2.2 )に出[[Construct]]
ていますが、そうではありません:
function F() {};
var obj = new F();
Object.getPrototypeOf(obj).constructor == F; // non-standard?? I can't find where in spec
コンストラクターのprototype.constructorプロパティをそれ自体に「リセット」する多くのコードを見ているので、私は尋ねます-それでも、このプロパティが最初にコンストラクター関数を指すことは非標準のようです?
function F() {};
F.prototype = new Parent();
F.prototype.constructor = F; // 'reset' it cuz it changed! (according to spec it should never have been set? Except in Object.prototype.
JS プログラマーは、prototype プロパティが設定されていない場合、コンストラクターのprototype.constructor プロパティがコンストラクター関数自体を指すというこの非標準(?) 期待に頼ることができますか?
V8は確かにこれを行います:
function F() {};
console.log(F.prototype.constructor === F); // true! WHY??? not in spec? Should be Object?
漠然とした意味があったことを願っています-ありがとう!! マーク
PSそれらの可変性のために、私はプロパティinstanceof
を使用する代わりに依存するだけです。constructor