【发布时间】:2020-03-19 10:44:28
【问题描述】:
我正在查看使用 getter/setter 的 ES6 类的示例之一;
class CoffeeMachine {
_waterAmount = 0;
set waterAmount(value) {
if (value < 0) throw new Error("Negative water");
this._waterAmount = value;
}
get waterAmount() {
return this._waterAmount;
}
constructor(power) {
this._power = power;
}
}
// create the coffee machine
let coffeeMachine = new CoffeeMachine(100);
// add water
coffeeMachine.waterAmount = -10; // Error: Negative water
我想了解下一行的工作原理;
coffeeMachine.waterAmount = -10
我的问题是,我们在课堂上的任何地方都使用了“_waterAmount”而不是“waterAmount”
所以班级里有 3 个名额;
_waterAmount = 0; // At class level
this._waterAmount = value; // Inside set
return this._waterAmount; // Inside get
在这种情况下,如何将“waterAmount”映射到“_waterAmount”?
【问题讨论】:
-
您已经通过将
_waterAmount放入get & set 来定义映射。即使您在所有地方将_waterAmount重命名为_amount,代码仍然可以工作。 -
好的......并且是“waterAmount”或“_waterAmount”类的实际属性?
-
@testndtv 有两个属性,
._waterAmount是数据属性和(继承自原型).waterAmount是访问器属性。 (以及在您的构造函数中定义的另一个数据属性._power) -
谢谢....还有一件事.. For _waterAmount = 0; ,是不是和我们在constructor()里面定义一样{this._waterAmount = 0;}
-
....意思是如果我们将其作为数据属性从外部移除,然后将其添加到构造函数中(如 _power ),那是一样的吗?
标签: javascript ecmascript-6 es6-class