处理类中的方法,可以处理方法的属性描述符、定义
function methodDesc ( target: any, name: string, descriptor: PropertyDescriptor ) {}
- 参数说明
- target:静态成员:类的构造函数;实例成员:类的原型对象
- name:成员的名称
- descriptor:属性描述符,详情看
Object.defineProperty
- configurable:是否可配置,再次配置描述符
- writeable:值是否可重写,重新复制
- enumerable:是否可枚举,遍历
- value:属性的值,即被装饰的函数,可通过该描述符替换方法的声明
- get/set:存取器,geter/seter
- 如果装饰器返回一个值,那么这个值会作为该成员的属性描述符对象(descriptor)
示例
function methodDesc( bool: boolean ) {
return function ( target: any, name: string, descriptor: PropertyDescriptor ) {
return {
value () {
console.log('can not say')
},
enumerable: bool
}
}
}
class Why {
@methodDesc(false)
public sayHi () {
console.log('Hi~')
}
}