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