2016-11-03 37 views
0

類A和B持有相同的地址引用到配置成員。我怎樣才能將它們分開?繼承靜態成員爲每個類別分開

class ConfigModel { 

    public static config = [] 

    public foo() { 
     //Code 
    } 

} 

class A extends ConfigModel { 

} 

class B extends ConfigModel { 

} 
+0

你想讓他們擁有什麼?分開他們如何? –

+0

A和B有配置成員。但是,如果我添加一些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] 

它所做的只是定義s第一次訪問tatic財產。希望能幫助到你!

+0

這真棒。對於TypeScript,我只添加'private static _config',它的功能非常完美 – R3Tech

0

您可以克隆的ConfigModel靜態數組轉換成新的靜態成員AB

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