2011-02-09 4 views
16

JavaScriptプロトタイプ継承では、prototype.constructorプロパティを追加する目標は何ですか?例を挙げて説明しましょう。「プロトタイプ」内の「コンストラクタ」プロパティの設定の利点

 
var Super = function() { 
    this.superProperty = 'Super Property' 
} 
var Sub = function() { 
    this.subProperty = 'Sub Property' 
} 

Sub.prototype = new Super(); 
Sub.prototype.constructor = Sub; // advantages of the statement 

var inst = new Sub(); 

以下の行は、Sub.prototype.constructor = Subを追加すると常にtrueを返します。

 
console.log(inst instanceof Sub) // true 
console.log(inst instanceof Super) // true 

私は、新しいインスタンスを取得するときに役立つかもしれませんが、いつ、どのようにするのですか?

ありがとうございます。

+2

大きな質問です! – tybro0103

答えて

10

constructorプロパティを正しくリセットして、オブジェクトの作成に使用した関数を正確に反映させるだけです。

Sub.prototype = new Super(); 

console.log(new Sub().constructor == Sub); 
// -> 'false' 

Sub.prototype.constructor = Sub; 
console.log(new Sub().constructor == Sub); 
// -> 'true' 
+2

それを設定しないとどうなるのですか?つまり、Sub.prototype.constructorの価値はいつ実際に重要になるのでしょうか? Subのインスタンスの作成にはあまり影響を与えていないようです。 – Yetanotherjosh

+6

@Yetanotherjosh:OPのコードの場合、もし彼がその行を出るならば、それは私には分かりませんが、 'inst.constructor === Super'、それは' new Sub() 'でインスタンス化されていました。これは一般的に問題はありませんが、そのインスタンスを他のコードと共有している場合は、 'new inst.constructor()'が実際にどこに来るかなど、混乱を招くことがあります'Sub()'ではなく 'Super()'のインスタンスで(Sub.prototype'専用のプロパティが存在しないため) ** tl;それは良いプログラミングの練習です**。 –

関連する問題