在类get和setter上使用ES装饰器
根据装饰器proposal在类getter或setter上装饰器是否正常?还是只允许使用正常的方法?例如在类get和setter上使用ES装饰器
class Foo extends Bar {
@override
get someProp() {
super.someProp + 2;
}
}
一些库/框架提供了这样的装饰器。但是例如巴贝尔解析器巴比伦认为这是一个错误!
我认为从decorator的角度来看,它完全适用于setter/getter字段,基本上是任何字段。由于“普通”属性和setter/getter属性在属性描述符类型上不同 - data descriptor vs accessor descriptor和装饰器应用于属性描述符,它可以应用于任何属性,包括“setter/getter”和“method”属性。
例如,你可以改变二传手“正常”属性的装饰里面:
function removesetter(klass, prop, descriptor) {
return {
value: 5,
writable: true
}
}
class Foo {
@removesetter
get someProp() {
return 3;
}
}
const f = new Foo();
console.log(f.someProp); // 5
谢谢你的回答。如果在类中有装饰器和装饰器,那么会有什么问题吗?或者如果描述符的get或set属性仅在每个装饰中更新,就足够了? – user2520818
并且在修饰器函数中可以确定所调用的方法是否是setter或getter? – user2520818
@ user2520818,使用描述符调用装饰器。它指定了getter和setter。我不认为有可能确定它被调用的方法。这两个getter/setter本质上只是一个具有特殊访问器描述符的属性,因此无法将相同的装饰器应用于setter/getter,因为它没有意义 –
这是完全罚款,对在类体内的任何属性定义一个装饰。装饰者当然需要能够处理这种描述符。 – Bergi
有没有什么不清楚我的答案? –