关闭ES2015(ES6)类中的类构造函数

CBl*_*lew 0 javascript closures class ecmascript-6

可以围绕构造函数创建一个闭包,以保存实例的唯一ID:

const MyObject = (() => {
  let id = 0;

  return function() {
    this.id = id++;
  };
})();
Run Code Online (Sandbox Code Playgroud)

使用类语法如何实现相同的目的?有没有一种方法可以围绕类的constructor函数创建一个闭包?

spa*_*nky 5

是的,使用类表达式可以执行以下操作:

const MyObject = (() => {
  let id = 0;

  return class MyObject {
    constructor() {
      this.id = id++;
    }
  };
})();

console.log(new MyObject().id);
console.log(new MyObject().id);
console.log(new MyObject().id);
Run Code Online (Sandbox Code Playgroud)


或者,您也可以使用常规的类声明来做到这一点。

const MyObject = (() => {
  let id = 0;

  class MyObject {
    constructor() {
      this.id = id++;
    }
  }

  return MyObject;
})();

console.log(new MyObject().id);
console.log(new MyObject().id);
console.log(new MyObject().id);
Run Code Online (Sandbox Code Playgroud)