我有如下ES6课程
class CoffeeMachine {
constructor(power) {
this._power = power;
}
get power() {
return this._power;
}
}
// create the coffee machine
let coffeeMachine = new CoffeeMachine(100);
console.log(coffeeMachine);
我有2个问题;
CoffeeMachine { _power: 100, __proto__: power: 100 }
我可以看到“ power”在CoffeeMachine的proto上,并且具有相同的值,即100考虑到我没有在任何地方显式设置“电源”,怎么办?
您需要创建一个带有#
前缀的私有变量。示例:
class CoffeeMachine {
#_power;
constructor(power) {
this.#_power = power;
}
get power() {
return this.#_power;
}
}
// create the coffee machine
let coffeeMachine = new CoffeeMachine(100);
console.log(coffeeMachine);
console.log(coffeeMachine._power);
console.log(coffeeMachine.power);
getter和setter是transparent,这意味着观察者(控制台)无法区分常规属性和getter / setter。
考虑到我没有在任何地方明确设置“电源”,怎么办?
我猜这是控制台一次评估对象的所有值,然后将这些值与拥有那些属性的相应对象相关联。否则,它将不得不对getter / setter方法进行两次评估(一次用于对象,一次用于原型),并且这种行为可能是不需要的。