プロトタイプについて読んだことから、コンストラクター関数のプロトタイプに対する変更は、そのコンストラクター関数を使用して作成されたすべてのオブジェクトに反映されるという印象を受けました。
次のコードを検討してください。
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 を構築した後で Class1 プロトタイプを Class2 に割り当てたため、prop1 と prop2 の値は「未定義」を返しています。
1* のコメントを外し、2* をコメントアウトすると、期待どおりの結果が得られます。
ここ数日、プロトタイプについてかなりの量の記事を読んできましたが、順序が重要であるとは誰も言いませんでした。