2011-01-13 14 views
1

次の結果について説明してください(Firefox 3.6でテスト済み)。 "this"が明らかにB型の場合、this.constructorはAプロトタイプをどのように指していますか? 、JavaScript '継承':コンストラクタのプロパティが正しくありません

A=function() {} 
A.prototype.copy=function() { 
    return new this.constructor(); 
} 
B=function() {} 
B.prototype=new A(); 

var b=new B(); 
var bcopy=b.copy(); 
var cond1=bcopy.constructor==B // false 
var cond2=bcopy.constructor==A // true 

答えて

0
var b = new B; 
b.constructor == A; // true 

場合はこのように、あなたのcopy()機能は、新しいAを作成している:私は辞書が最上位レベルダウンプロトタイプチェーンから横断していることを錯覚の下にあったが、ここではケースではないようですただし、次の行を追加してください:

B.prototype.constructor = B; 

...あなたが望んでいた結果が得られます。

+0

しかし、なぜb.constructor == Aですか?それをAとするのは誰ですか? – shurik

+1

'.prototype = new A();'を指定すると '.constructor'プロパティが' A'を指し示すオブジェクトが得られます。 「B」から作成されたすべての「インスタンス」が検索され、こう言われました。「あなたは私のコンストラクタがAだと言ったので、尋ねるたびにレポートします」_正しい値に戻す必要があります。あなたはそれを殴った。 – Phrogz

+0

次のことが真であることを確認してください。最初は、すべての関数にプロトタイププロパティがあります。このプロパティは、コンストラクタメソッドというオブジェクトを1つだけ持つオブジェクトを指します。だから、コンストラクタのプロパティは常にプロトタイプから来ます。プロトタイプを再定義すると、コンストラクターを初期値に戻す必要があります。 – shurik

関連する問題