有沒有辦法在創建實體時執行set方法?。我有這段代碼:
class CoffeeMachine {
_power;
constructor(power) {
this._power = power;
}
set power(value) {
if (value < 100) {
this._power = 100;
}
}
get power() {
return this._power;
}
}
// create the coffee machine
let machine = new CoffeeMachine(90);
console.log(machine)
我知道如果我將“power”設定為 public,setter 將被執行,但我需要它是一個受保護的屬性。即使功率小于 100,它仍然是 90,所以它不起作用。有小費嗎?
uj5u.com熱心網友回復:
我猜你的設定器邏輯不應該超過 100 的功率級別。當原因有效時你沒有設定值。您應該power在建構式中設定,而不是直接在私有屬性中設定。
我添加了日志記錄來顯示被呼叫的東西。
class CoffeeMachine {
#power;
constructor(power) {
console.log(`contructor called with value ${power}`);
this.power = power;
}
set power(value) {
console.log(`setter called with ${value}`);
this.#power = value > 100 ? 100 : value;
console.log(`power set to ${this.#power}`);
}
get power() {
console.log(`getter called, returning ${this.#power}`);
return this.#power;
}
}
// create the coffee machine
let machine = new CoffeeMachine(90);
console.log(1, machine.power);
machine.power = 1000;
console.log(2, machine.power);
如果您不想要公共二傳手,則不要添加。
class CoffeeMachine {
#power;
constructor(power) {
console.log(`contructor called with value ${power}`);
this.#updatePower(power);
}
#updatePower(value) {
console.log(`setter called with ${value}`);
this.#power = value > 100 ? 100 : value;
console.log(`power set to ${this.#power}`);
}
get power() {
console.log(`getter called, returning ${this.#power}`);
return this.#power;
}
}
// create the coffee machine
let machine = new CoffeeMachine(90);
console.log(1, machine.power);
machine.power = 1000; // ignored
console.log(2, machine.power);
uj5u.com熱心網友回復:
您必須將this._power = power;建構式中的 更改為this.power = power;,因為 上沒有放置二傳手_power。如果你設定power,它應該呼叫設定器。
class CoffeeMachine {
_power;
constructor(power) {
this.power = power; // ***
}
set power(value) {
if (value < 100) {
this._power = 100;
}
}
get power() {
return this._power;
}
}
// create the coffee machine
let machine = new CoffeeMachine(90);
console.log(machine)
作為旁注,您可以_power通過將其設為私有#power(有關更多資訊,請參閱MDN 檔案)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/534330.html
標籤:javascript
