问题描述
是否可以使用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行为?
解决方法
正如您所说,做类似user.roles.push('my-role')
的事情只会使现有数组发生突变。可以通过添加roles
和addRole
之类的方法来代替通过removeRole
设置器直接访问数组。然后,您可以实现在向roles
数组添加或删除数组时所需的任何逻辑,使其完全私有。