在类get和set方法上使用ES装饰器

时间:2017-10-17 14:39:41

标签: javascript decorator ecmascript-next

根据装饰者proposal可以在类getter或setter上设置装饰器吗?或者他们只允许采用常规方法? e.g。

class Foo extends Bar {

  @override
  get someProp() {
    super.someProp + 2;
  }
}

一些库/框架提供了这样的装饰器。但是,例如巴贝尔解析器巴比伦将其标记为错误!

1 个答案:

答案 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