You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在创建JavaScript类实例时执行set方法?

解决方案:在构造函数中调用setter方法

你当前的问题是构造函数里直接给_power赋值,跳过了power setter的校验逻辑。要在实例化时触发校验,核心是不要直接操作受保护的_power字段,而是通过setter来赋值。

修改后的代码(保留受保护字段)

class CoffeeMachine {
  _power;
  
  constructor(power) {
    // 调用setter替代直接赋值_power
    this.power = power;
  }
  
  set power(value) {
    if (value < 100) {
      this._power = 100;
    } else {
      // 补充合法值的赋值逻辑,避免有效值无法存入
      this._power = value;
    }
  }
  
  get power() {
    return this._power;
  }
}

// 测试实例化
let machine = new CoffeeMachine(90);
console.log(machine.power); // 输出100,符合校验规则

更严格的私有字段方案(可选)

如果需要完全禁止外部访问内部字段,可以使用ES6私有字段(#前缀),此时外部无法直接访问#power,只能通过setter/getter操作:

class CoffeeMachine {
  #power; // 私有字段,外部不可访问
  
  constructor(power) {
    this.power = power;
  }
  
  set power(value) {
    if (value < 100) {
      this.#power = 100;
    } else {
      this.#power = value;
    }
  }
  
  get power() {
    return this.#power;
  }
}

let machine = new CoffeeMachine(90);
console.log(machine.power); // 100
// console.log(machine.#power); // 直接访问会报错

内容的提问来源于stack exchange,提问作者Kns

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 19:01:19