getter 和 setter
getter
和 setter
允许你定义用于在类上读取和写入给定属性的自定义行为。对于用户,它们看起来与任何典型属性相同。但是,在内部,你提供的自定义函数用于确定访问属性时的值(getter),并在分配属性(setter)时执行任何必要的更改。
在 class
定义中,getter 的编写方式类似于以 get
关键字为前缀的无参数方法。setter 类似,只是它接受一个参数(分配了新值),而使用了 set
关键字。
这是一个示例类,它为 .name
属性提供了一个 getter 和 setter。每次分配时,我们都会在内部 .names_
数组中记录新名称。每次访问时,我们都会返回最新的名称。
class MyClass {
constructor() {
this.names_ = [];
}
set name(value) {
this.names_.push(value);
}
get name() {
return this.names_[this.names_.length - 1];
}
}
const myClassInstance = new MyClass();
myClassInstance.name = 'Joe';
myClassInstance.name = 'Bob';
console.log(myClassInstance.name); // logs: "Bob"
console.log(myClassInstance.names_); // logs: ["Joe", "Bob"]
如果你只定义了一个 setter,那么尝试访问该属性将始终返回 undefined
。
const classInstance = new class {
set prop(value) {
console.log('setting', value);
}
};
classInstance.prop = 10; // logs: "setting", 10
console.log(classInstance.prop); // logs: undefined
如果你只定义了一个 getter,则尝试分配该属性将不起作用。
const classInstance = new class {
get prop() {
return 5;
}
};
classInstance.prop = 10;
console.log(classInstance.prop); // logs: 5