每个类单独的继承静态成员

Inheritance static member separate for each class

本文关键字:继承 静态成员 单独      更新时间:2023-09-26

类A和类B持有对配置成员的相同地址引用。我怎么把它们分开呢?

class ConfigModel {
    public static config = []
    public foo() {
        //Code
    }
}
class A extends ConfigModel {
}
class B extends ConfigModel {
}

您可以尝试以下操作:

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]

它所做的只是在第一次访问时动态地定义静态属性。希望能有所帮助!

可以将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)