【发布时间】:2016-10-25 06:08:39
【问题描述】:
我一直在寻找一个明确的答案,但大多数弹出的内容仍然与使用 function 定义类的旧(或者我应该说“传统”)方式有关。
ES2015 不支持类属性。
据我所知,将静态变量添加到类的唯一方法是:
https://jsfiddle.net/abalter/fknwx3n4/
class C {
constructor(x) {
console.log("in constructor " + x);
this.x = x;
this.add(this.x);
}
add(x) {
console.log("in add " + x);
C.alist.push(x);
}
show() {
console.log("in show");
console.log(C.alist);
}
}
// MUST be done outside of actual class definition.
C.alist = [];
c1 = new C(5);
c1.show();
c2 = new C(10);
c1.show();
c2.show();
故事就这样结束了吗?在类定义中无法做到这一点似乎很奇怪。
【问题讨论】:
-
是的,故事到此结束。将这些属性放在类定义之后没有任何问题,顺便说一句
-
ES7 支持类属性。但是不,这不是 ES2015 故事的结局。该数组可以在构造函数中设置为实例属性。
-
@Vohuman:ES7 不会,而且可能 ES8 也不会。
-
@Vohuman This proposal is still on stage 1。已经很久了。我不确定为什么它没有向前发展,因为看起来很多人都希望看到它。
-
@abalter:不,我的意思是只有
C.alist = [];是单例对象。当然,在一切都是类的 Java 中,你需要一个额外的类来创建单例实例,而在 JS 中直接创建对象要简单得多。
标签: javascript class oop ecmascript-6 static-members