を保持し、私はここにJavaScriptでの継承を使用しようとしている、と私は子供クラスによって継承され親クラスの配列値を持つ問題を発見しました。コードの下には、通常の継承である:Javascriptの継承:親の配列変数に値
var Parent = function() {
this.list = [];
};
var Child = function() {};
Child.prototype = new Parent;
Child.prototype.constructor = Child;
var obj1 = new Child;
obj1.list.push("hello");
console.log(obj1.list); // prints ["hello"];
私はOBJ1に(リストという名前の配列変数を含む親を継承する)新しい子供オブジェクトを初期化し、値をobj1.listをプッシュしようとしたときに " hello "、obj1.list print [" hello "] ..これまでのところとても良いです。
問題は、私は上記の例を行なったし、私は、値 『さようなら』とobj2のさんリストを押しobj2がに新しい子オブジェクトを初期化しようとしたときに来て、obj2.list ["hello"、 "goodbye"]が表示されます。 (:)
var obj2 = new Child;
obj2.list.push("goodbye");
console.log(obj2.list); // prints ["hello", "goodbye"];
以下のコードを参照してください。私はここで誤解があるかもしれませんが、親でリスト配列は何とか値を保持して、私は理由を知りません。
私は上記のケースのような他の多くの子クラスに親クラスを再利用する場合親は、その子クラスに共有配列変数を持っている場合、値が他の子に共有されるので、これは大きな問題です私にとっては予期せぬことです。その後、私はobj2のに新しい子オブジェクトを初期化
私は何を期待することは、子供クラスは新しいオブジェクトを表している子供クラスはOBJ1に初期化されたときに、同じことが親クラスに行き、の場合、obj1のプッシュ値はobj2と共有しないでください。
- 質問 -
誰でも例のリスト(親の配列変数)が上記の値は、/託児によって開始された値を共有して保持し、なぜ私が出て見つけることができますオブジェクト(上記の場合、obj1およびobj2)?
この問題を解決する別の解決策がある場合は、非常にうれしいですが、上記の問題を最初に見つけてうれしく思います。
両方のインスタンスが同じ「Parent」インスタンスをプロトタイプとして参照し、したがって同じ配列を参照するためです。ここでは多くのJavaScript OOPに関する質問がありました。 –
可能な複製の[Ondesrtanding JavascriptのOOP:他のインスタンスを変更するインスタンス](http://stackoverflow.com/questions/4541788/undesrtanding-javascripts-oop-instances-modifying-other-instances)と[Javascriptのプロトタイプのプロパティが期待どおりに機能しない配列とオブジェクトフィールドを持つ](http://stackoverflow.com/questions/8230085/javascript-prototype-property-not-working-as-expected-with-array-and-object-fiel) –