每个类的继承静态成员是分开的

时间:2016-11-03 19:13:46

标签: javascript node.js inheritance typescript

A类和B类对config成员保持相同的地址引用。我该如何分开它们?

class ConfigModel {

    public static config = []

    public foo() {
        //Code
    }

}

class A extends ConfigModel {

}

class B extends ConfigModel {

}

2 个答案:

答案 0 :(得分: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]

所有这一切都是为了第一次访问时动态定义静态属性。希望它有所帮助!

答案 1 :(得分: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