对于数组属性,有没有使用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了,因为向数组添加项目不会改变指针,而只是增加已经分配的空间(如果我错了,请纠正我)。
我们如何在数组属性上获得所需的getter / setter行为?
发布于 2020-08-21 17:09:20
正如您所说的,像user.roles.push('my-role')
这样做只会改变现有的数组。您可以添加像addRole
和removeRole
这样的方法,而不是通过roles
-setter直接访问数组。然后,您可以在向roles
数组添加或删除时实现所需的任何逻辑,使其完全私有。
https://stackoverflow.com/questions/63519316
复制相似问题