DRY up - 如果不存在实例则调用 class 方法,否则调用实例方法

DRY up - Call class method if no instance exists, otherwise call instance method

情况

如果输入 "start",自动计算 "end",然后用 "end"

预填充页面

如果输入是 "end",只需用它预填充页面

我正在尝试编写 class 来处理此功能。

class EndVal(start_value) {
  constructor() {
    this.end_value = start_value + 10
    $("#end").text(this.end_value)
  }

  static prefill(end_value) {
    $("#end").text(end_value)
  }
}

根据上面的代码,如果你有一个 "start",你只需做 new EndVal(start_value),但如果你已经有一个 "end" 而不是实例化一个新对象,你可以做 EndVal.prefill(end_value)。但它不是很干......我想知道如何修复它,以及不知何故 link 实例和 class 方法?

prefill 方法应该使用传递的参数而不是 this。现在您可以使用构造函数中的所有方法:

class EndVal {
  constructor(start_value) {
    this.end_value = start_value + 10
    this.constructor.prefill(this.end_value);
  }

  static prefill(end_value) {
    console.log(end_value);
  }
}

const endVal = new EndVal(15);

EndVal.prefill(28);