javascript - 为 Javascript 类创建静态或类变量的现代方法

标签 javascript class oop ecmascript-6 static-members

我一直在寻找一个明确的答案,大部分弹出的内容仍然与使用 function 定义类的旧方法(或者我应该说“传统的”)有关。

根据 this SO answer ,

Class properties are not supported in 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();

故事就这样结束了吗?无法在类定义中执行此操作似乎很奇怪。

最佳答案

您可以在类定义后立即调用初始化所有静态成员的静态函数,然后可选择删除该函数。 (可能重置静态变量是一项功能?)

这将允许您将所有静态变量保留在类声明中。

class C {
  static init() {
    C.alist = [];
  }

  constructor(x) {…}
  add(x) {…}
  show() {…}
}
C.init();
delete C.init;

另一种选择是在构造函数中初始化静态变量,但这需要在使用静态变量之前至少实例化一个对象。

class C {
  constructor(x) {
    C.alist = C.alist || [];
    …
  }
  add(x) {…}
  show() {…}
}

关于javascript - 为 Javascript 类创建静态或类变量的现代方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37982610/

相关文章:

parsing - 使用 Simple HTML DOM Parser 查找堆叠的 div 类

javascript - 页面中有两个以上的脚本,当第一个为 false 时停止执行第二个脚本

javascript - Chrome : "open link in new tab" not firing the click event?

如果不包含函数列表,C++ 程序将无法编译

c# - 与枚举和公共(public)类(class)混淆 - 为什么它不起作用?

javascript - 配置属性遮蔽

c++ - 在函数内部声明的对象的范围

javascript - 无法通过 eval() 函数更新变量

javascript - ExtJS:简单表单忽略 formBind

javascript - 更改 Javascript 中的值似乎不起作用