【问题标题】:Closure around class constructor in ES2015 (ES6) classesES2015 (ES6) 类中的类构造函数的闭包
【发布时间】:2018-02-03 23:51:59
【问题描述】:

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

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

  return function() {
    this.id = id++;
  };
})();

如何使用类语法实现相同的效果?有没有办法围绕类的 constructor 函数创建一个闭包?

【问题讨论】:

    标签: javascript class ecmascript-6 closures


    【解决方案1】:

    是的,使用class expressions 你可以这样做:

    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);

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

    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);

    【讨论】:

    • 仅供参考,可以通过将 MyObject.prototype.constructor 上的函数替换为引用原始函数的新函数来仅包装构造函数,但我认为包装整个东西看起来更干净。
    • 仅供参考,您甚至可以省略名称:return class { ... }
    猜你喜欢
    • 2015-12-01
    • 2020-05-10
    • 2019-09-06
    • 1970-01-01
    • 2017-04-19
    • 2019-08-09
    • 1970-01-01
    • 2016-04-30
    • 1970-01-01
    相关资源
    最近更新 更多