5

ひとり親クラスを続けたい。親クラスを継承するすべての clid クラスは、同じ親クラス オブジェクトを共有できます。それはどのように達成できますか?

var ParentClass = function(){
    this.a = null;
}

ParentClass.prototype.setA = function(inp){
    this.a = inp;
}

ParentClass.prototype.getA = function(){
    console.log("get a "+this.a);
}

// Clild Class

var ClassB = function(){}

ClassB.prototype = Object.create(ParentClass.prototype);

var b = new ClassB();
b.setA(10);
b.getA(); //it will return 10


//Another clild Class
var ClassC = function(){}

ClassC.prototype = Object.create(ParentClass.prototype);
var c = new ClassC();
c.getA(); //I want 10 here.

2番目のclildクラスに関しては、親クラスが再びインスタンス化されているため、古いオブジェクトにアクセスできないことを理解しています。Javascriptでこのシングルトン継承を実現するにはどうすればよいですか? 何か案が?

4

2 に答える 2

3

そのような静的な値を別の場所に置きます。thisは現在のインスタンスであり、新しいプロパティを作成する場所ではありません。選択肢は次のとおりです。

  • ParentClass.prototype(@bfavaretto で示されているように)、これにより、すべてのインスタンスがそれを継承して上書きできるようになります。
  • スコープ変数 (基本的に公開モジュール パターンを実装します):

    (function() {
        var a;
        ParentClass.prototype.setA = function(inp){
            a = inp;
        };
        ParentClass.prototype.getA = function(){
            console.log("get a "+a);
            return a;
        };
    }());
    
  • 関数ParentClassオブジェクト自体:

    ParentClass.prototype.setA = function(inp){
        ParentClass.a = inp;
    };
    ParentClass.prototype.getA = function(){
        console.log("get a "+ParentClass.a);
        return ParentClass.a;
    };
    
于 2013-09-11T22:51:06.820 に答える
1

getA任意のインスタンスから呼び出すと、そのthis内部の値はインスタンス自体を指します。セッターコードを次のように変更すると、探しているものを実現できます。

ParentClass.prototype.setA = function(inp){
    ParentClass.prototype.a = inp;
}

getAParentClass のインスタンスから呼び出すと が返され、コンストラクターはプロトタイプのプロパティをシャドウnullする独自のプロパティを定義することに注意してください。a

于 2013-09-11T22:45:38.660 に答える