2016-11-03 16 views
0

クラスAとBは、同じメンバ参照を構成メンバに保持しています。どうすればそれらを分けることができますか?クラスごとに継承された静的メンバ

class ConfigModel { 

    public static config = [] 

    public foo() { 
     //Code 
    } 

} 

class A extends ConfigModel { 

} 

class B extends ConfigModel { 

} 
+0

あなたは何を持っていますか?どのようにそれらを分ける? –

+0

AとBにはconfigメンバがあります。しかし、A.configに何かを追加すると、B.configはそれを持ってはいけません – R3Tech

+1

...なぜ静的な設定ですか? –

答えて

2

をあなたは次のことを試してみたいことがあります。

class ConfigModel { 
    static get config() { 
    return this._config = this._config || []; 
    } 
} 

class A extends ConfigModel { 
} 

class B extends ConfigModel { 
} 

A.config.push(1); 
B.config.push(2); 

console.log(A.config); // [1] 
console.log(B.config); // [2] 

すべてを定義するには一度初めてアクセスされたときのタイティックプロパティ。それが役に立てば幸い!

+0

これは素晴らしいです。 TypeScriptの場合は 'private static _config'を追加するだけで完璧に動作します – R3Tech

0

あなたはABに新しい静的メンバーにConfigModelの静的配列のクローンを作成することができます

class ConfigModel { 
    public static config = [1, 2]; 
} 

class A extends ConfigModel { 
    public static config = ConfigModel.config.slice(0); 
} 

class B extends ConfigModel { 
    public static config = ConfigModel.config.slice(0); 
} 

console.log(ConfigModel.config); // [1, 2] 
console.log(A.config); // [1, 2] 
console.log(B.config); // [1, 2] 

A.config.push(3); 
console.log(ConfigModel.config); // [1, 2] 
console.log(A.config); // [1, 2, 3] 
console.log(B.config); // [1, 2] 

B.config.pop(); 
console.log(ConfigModel.config); // [1, 2] 
console.log(A.config); // [1, 2, 3] 
console.log(B.config); // [1] 

code in playground

+0

私は、すべてのクラスに構成メンバーを追加したくありません。 atmをテストするために、メンバーは公開されています。将来はプライベートになるでしょう。 – R3Tech

関連する問題