读写器和静态
接口通常主要由方法组成,但也可以持有非函数值的属性。 例如,Map
对象有size
属性,告诉你有多少个键存储在它们中。
这样的对象甚至不需要直接在实例中计算和存储这样的属性。 即使直接访问的属性也可能隐藏了方法调用。 这种方法称为读取器(getter),它们通过在方法名称前面编写get
来定义。
let varyingSize = {
get size() {
return Math.floor(Math.random() * 100);
}
};
console.log(varyingSize.size);
// → 73
console.log(varyingSize.size);
// → 49
每当有人读取此对象的size
属性时,就会调用相关的方法。 当使用写入器(setter)写入属性时,可以做类似的事情。
class Temperature {
constructor(celsius) {
this.celsius = celsius;
}
get fahrenheit() {
return this.celsius * 1.8 + 32;
}
set fahrenheit(value) {
this.celsius = (value - 32) / 1.8;
}
static fromFahrenheit(value) {
return new Temperature((value - 32) / 1.8);
}
}
let temp = new Temperature(22);
console.log(temp.fahrenheit);
// → 71.6
temp.fahrenheit = 86;
console.log(temp.celsius);
// → 30
Temperature
类允许你以摄氏度或华氏度读取和写入温度,但内部仅存储摄氏度,并在fahrenheit
读写器中自动转换为摄氏度。
有时候你想直接向你的构造器附加一些属性,而不是原型。 这样的方法将无法访问类实例,但可以用来提供额外方法来创建实例。
在类声明内部,名称前面写有static
的方法,存储在构造器中。 所以Temperature
类可以让你写出Temperature.fromFahrenheit(100)
,来使用华氏温度创建一个温度。
当前内容版权归 wizardforcel 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 wizardforcel .