数组 属性 上的打字稿 getter / setter
typescript getter / setter on array property
数组属性有使用 getter / setter 模式的好方法吗?
例如:
export class User {
private _name: string;
set name(value: string) {
this._name = value;
}
get name(): string {
return this._name;
}
private _roles = new Array<string>();
set roles(value: Array<string>) {
this._roles = value;
}
get roles(): Array<string> {
return this._roles;
}
constructor() {
}
}
虽然更改 user.name 会触发 setter 方法,但在角色中添加或删除项目不会。
现在我想我明白了为什么它不触发 setter,因为将项目添加到数组不会更改指针,而只是添加到已经分配的 space(如果我纠正我我错了)。
我们如何才能在数组属性上获得所需的 getter / setter 行为?
正如您所说,user.roles.push('my-role')
之类的操作只会改变现有数组。您可以添加 addRole
和 removeRole
等方法,而不是通过 roles
-setter 直接访问数组。然后你可以在添加或删除 roles
数组时实现你需要的任何逻辑,保持它完全私有。
数组属性有使用 getter / setter 模式的好方法吗?
例如:
export class User {
private _name: string;
set name(value: string) {
this._name = value;
}
get name(): string {
return this._name;
}
private _roles = new Array<string>();
set roles(value: Array<string>) {
this._roles = value;
}
get roles(): Array<string> {
return this._roles;
}
constructor() {
}
}
虽然更改 user.name 会触发 setter 方法,但在角色中添加或删除项目不会。
现在我想我明白了为什么它不触发 setter,因为将项目添加到数组不会更改指针,而只是添加到已经分配的 space(如果我纠正我我错了)。
我们如何才能在数组属性上获得所需的 getter / setter 行为?
正如您所说,user.roles.push('my-role')
之类的操作只会改变现有数组。您可以添加 addRole
和 removeRole
等方法,而不是通过 roles
-setter 直接访问数组。然后你可以在添加或删除 roles
数组时实现你需要的任何逻辑,保持它完全私有。