2012-04-27 12 views
2

プロトタイプについての私の読書から、コンストラクタ関数のプロトタイプへの変更は、そのコンストラクタ関数を使用して作成されたすべてのオブジェクトに反映されるという印象を受けました。javacriptのプロトタイプ割り当ての順序

var Class1 = function(){ 
    this.prop1 = 'value1'; 
}; 
Class1.prototype.prop2 = 'value2'; 

var Class2 = function(){ 
    this.prop3 = 'value3'; 
}; 

//Class2.prototype = new Class1(); //1* 
var obj1 = new Class2(); 
Class2.prototype = new Class1(); //2* 

console.log('1 ' + obj1.prop1); // undefined 
console.log('2 ' + obj1.prop2); // undefined 
console.log('3 ' + obj1.prop3); // value3 

あなたが見ることができるように、私はobj1が構築された後、私はクラス2にClass1のプロトタイプを割り当てたため、その後、PROP1とPROP2の値が「未定義」戻ってきている。

は、このコードを検討してください。
1 *のコメントを外して2 *をコメントアウトすると、結果は期待どおりです。

私はここ数日間、プロトタイプについてかなりの読書をしましたが、誰もその注文が重要であるとは言いませんでした。

答えて

1

newキーボードではECMAscriptが新しく新しく作成されたObject(親オブジェクトにバインドされたprototype)を返すため、もちろん順序は重要です。したがって、クラス "というクラスのインスタンスを作成すると、エンジンはプロトタイプチェーンを認識している必要があります(クラスはECMAscriptでは実際には存在しません)。

+1

これについてはもちろんありません。私は.NETのバックグラウンドから来ており、これまでにたくさんの前提が破壊されました。新しく作成されたObjectが作成され、 'new'キーワードが使用された時点でプロトタイプがバインドされていることを説明します。私はこれを知っているので、オブジェクトが作成された後のプロトタイプの内容を変更することは、前記オブジェクトによって無視されると容易に想定することができます。これはそうではありません。私が知る限り、プロトタイプは、いつでも古いオブジェクトを指すことができるリファレンスです。これはそうではないようです。それを説明するサイトの提案はありますか? – Jules

関連する問題