【问题标题】:Mimic static property in javascript classes在 javascript 类中模拟静态属性
【发布时间】:2016-10-14 14:11:43
【问题描述】:

在 es6 中为模拟静态属性的类保留属性的最佳方法是什么?

使用原型链中创建的属性是否安全?

class Employee {
  constructor(name, creator) {
    this.name = name;
    if(! (creator in Employee.prototype)){
       Employee.prototype[creator] = 0;
      }
    Employee.prototype[creator]++;
  }
  static count(creator) {
    return Employee.prototype[creator];
  }
}


var y = new Employee("Jack", "x");
var z = new Employee("John", "y");
var jh = new Employee("John", "y");

console.log(Employee.count('x'), Employee.count('y'));

【问题讨论】:

  • 有什么意义?你可以简单地设置 Employee Empliyee.count = 0;
  • @Maxx 基本上,我只是想了解静态属性,但检查更新的第二个示例
  • 你可以做到,但几乎没用。静态属性只是类上的属性,例如 Employee.count。不多不少。您对原型所做的事情绝对与静态属性无关
  • 所以我可以在上面的场景中使用Employee[creator]
  • 供将来参考,假设您的代码正常工作(在这种情况下确实如此),并且您正在寻找良好的标准实践、更有效的解决方案等。这种格式的问题更适合Code Review

标签: javascript class static ecmascript-6


【解决方案1】:

安全吗?是的。乱?是的。更好的选择?你打赌。

你应该把你的计数器逻辑移出你的构造函数来清理一下。试试这样的:

class Employee {
  static count(creator) {
    return Employee[creator] || 0;
  }

  static increment(creator) {
    Employee[creator] = Employee.count(creator) + 1;
  }

  constructor(name, creator) {
    this.name = name;
    Employee.increment(creator);
  }
}

请注意不要使用 countincrementconstructorprototype 等创建者名称,否则您可能会覆盖您的类属性。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-11-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    相关资源
    最近更新 更多