如何在创建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
相关产品推荐
相关产品推荐

