我刚刚学习访问器的装饰器,现在我想对set访问器进行装饰,期待返回:set装饰器 + name,但是一直没有效果,请教一下懂的同学。
demo:
// 访问器装饰器
function testDecorator(target: any, key: string, descriptor: PropertyDescriptor) {
descriptor.set = (name: string) =>{ // set如何访问 this._name
name = "set装饰器:" + name;
return name;
}
}
// 类
class Test {
private _name: string;
constructor(name: string) {
this._name = name;
}
get name() {
return this._name;
}
@testDecorator // 希望通过装饰器,对this._name做一点处理
set name(name: string) {
this._name = name;
}
}
const test = new Test('111');
test.name = '222'
console.log(test.name); // 还是输出: 111, 期待输出: set装饰器:222
你需要稍微修改装饰器的实现。你可以把原始的set方法保存在一个变量中,然后在装饰器的set方法中调用它。这里是修复后的代码:
现在,装饰器将正确地修改name值并将其保存在_name属性中。