当在ES6类上定义静态属性,并且您有其他扩展该类的类时,对父类的属性的任何更改似乎都会更改所有子类的值。这似乎是一个微妙的原型链问题。如果你首先在子类上设置属性值,那么它似乎“拥有”它 - 即。它不会反映超类的变化。我的问题是我想要一个类属性,它在第一次使用类时标记一次保证的初始化初始化,并且因为这是一个库/框架,所以我不想强迫用户显式设置静态值在他们自己的子类定义中。除了拥有跟踪它的全局之外,还有其他方法可以将子类的静态属性分开吗?
演示问题的代码:
class Class1 {
static get initialized() { return this.$initialized }
static set initialized(flag) { this.$initialized = flag}
}
class Class2 extends Class1 {}
Class1.initialized
- >未定义
Class1.initialized = false;
Class2.initialized
- >假
Class1.initialized = true;
Class2.initialized
- >真
答案 0 :(得分:0)
问题是$initialized
属性也是继承的,所以一旦超类初始化,这将反映在所有子类中。您可以编写getter,以便忽略继承的属性:
class Class1 {
static get initialized() {
return this.hasOwnProperty("$initialized")
? this.$initialized
: undefined; // or whatever default value you want
}
static set initialized(flag) {
this.$initialized = flag
}
}