aba*_*ter 7 javascript oop class static-members ecmascript-6
我一直在寻找一个明确的答案,弹出的大部分内容仍然与旧的(或者我应该说"传统的")方式相关function.
根据这个SO答案,
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();
Run Code Online (Sandbox Code Playgroud)
这是故事的结尾吗?在类定义中无法做到这一点似乎很奇怪.
您可以在定义类后立即调用一个静态函数来初始化所有静态成员,然后可以选择删除该函数。(重置静态变量可能是一个功能?)
\n\n这将允许您将所有静态变量保留在类声明中。
\n\nclass C {\n static init() {\n C.alist = [];\n }\n\n constructor(x) {\xe2\x80\xa6}\n add(x) {\xe2\x80\xa6}\n show() {\xe2\x80\xa6}\n}\nC.init();\ndelete C.init;\nRun Code Online (Sandbox Code Playgroud)\n\n另一种选择是在构造函数中初始化静态变量,但这要求在使用静态变量之前至少实例化一个对象。
\n\nclass C {\n constructor(x) {\n C.alist = C.alist || [];\n \xe2\x80\xa6\n }\n add(x) {\xe2\x80\xa6}\n show() {\xe2\x80\xa6}\n}\nRun Code Online (Sandbox Code Playgroud)\n