处理类中的方法,可以处理方法的属性描述符、定义

  1. function methodDesc ( target: any, name: string, descriptor: PropertyDescriptor ) {}
  • 参数说明
    • target:静态成员:类的构造函数;实例成员:类的原型对象
    • name:成员的名称
    • descriptor:属性描述符,详情看 Object.defineProperty
      • configurable:是否可配置,再次配置描述符
      • writeable:值是否可重写,重新复制
      • enumerable:是否可枚举,遍历
      • value:属性的值,即被装饰的函数,可通过该描述符替换方法的声明
      • get/set:存取器,geter/seter
  • 如果装饰器返回一个值,那么这个值会作为该成员的属性描述符对象(descriptor)

示例

  1. function methodDesc( bool: boolean ) {
  2. return function ( target: any, name: string, descriptor: PropertyDescriptor ) {
  3. return {
  4. value () {
  5. console.log('can not say')
  6. },
  7. enumerable: bool
  8. }
  9. }
  10. }
  11. class Why {
  12. @methodDesc(false)
  13. public sayHi () {
  14. console.log('Hi~')
  15. }
  16. }