2012-01-26 14 views
1

私は継承を試みましたが、私はthis.arrayが静的​​メンバーのように振る舞うことを期待していませんでした。JavaScript:継承

function A() { 
    this.array = []; 
} 

function B() { 
    this.array.push(1); 
} 
B.prototype.constructor=B; 
B.prototype = new A(); 

Firebugは:どのように私はそれが '/公共の保護' することができます

>>> b = new B(); 
A { array=[1]} 
>>> b = new B(); 
A { array=[2]} 
>>> b = new B() 
A { array=[3]} 
+0

最後の2行は、逆になります。 'prototype.constructor' *を' prototype'の後に設定します。 – Ryan

+0

これは単なる例であることを認識していますが、代わりに 'this.array = [1]'を使わないのはなぜですか? – Ryan

+0

オリジナルコードは次のようになります。 functionコントローラ(uri){ this._controllerURI = uri; this._controllers = []; this._views = []; this._events = []; }。単なるサンプルです。 – DraganS

答えて

3

"プライベート/保護された" ではないが、これは各Bのための新しい配列を作成します。

function A() { 
    this.array = []; 
} 

function B() { 
    A.apply(this); // apply the A constructor to the new object 
    this.array.push(1); 
} 
// B.prototype.constructor=B; // pointless 
B.prototype = new A(); 
+0

私はあなたが 'A.call(this);'を意味すると思います。 – Ryan

+0

@user(\ d)*パーフェクト。ありがとう。 @minitech:適用することができます - それは動作します。 $ Queryの置換えのためのドキュメント/サンプルコードはどこにありますか? – DraganS