根据装饰者proposal可以在类getter或setter上设置装饰器吗?或者他们只允许采用常规方法? e.g。
class Foo extends Bar {
@override
get someProp() {
super.someProp + 2;
}
}
一些库/框架提供了这样的装饰器。但是,例如巴贝尔解析器巴比伦将其标记为错误!
答案 0 :(得分:2)
我认为从装饰器的角度来看它完全可以应用于setter / getter字段,基本上是任何字段。因为"正常" property和setter / getter属性在属性描述符的类型上有所不同 - data descriptor vs accessor descriptor并且装饰器应用于属性描述符,它可以应用于任何属性,包括" setter / getter"和"方法"属性。
例如,您可以将设置器更改为" normal"装饰者内部的属性:
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