首页

装饰器详解

目前原生js中还不能使用装饰器,所以要依靠typescript来实现

typescript装饰器文档

装饰器可以用到哪里

装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上。 装饰器使用 @expression这种形式,expression求值后必须为一个函数,它会在运行时被调用,被装饰的声明信息做为参数传入。

装饰器应用顺序

1.参数装饰器,然后依次是方法装饰器,访问符装饰器,或属性装饰器应用到每个实例成员。
2.参数装饰器,然后依次是方法装饰器,访问符装饰器,或属性装饰器应用到每个静态成员。
3.参数装饰器应用到构造函数。
4.类装饰器应用到类。

方法装饰器

在类的方法上应用装饰器 装饰器函数可以接收到三个参数 这个函数返回的对象会作为属性描述符

function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
        descriptor.enumerable = value;
};

targe 是类,propertyKey就是方法的名字,descriptor是属性描述符,主要就是通过修改属性描述符来实现自己想要装饰的功能

应用方法原有逻辑然后修改返回结果,对传入的参数进行处理

function (target: any, propertyKey: string, descriptor: PropertyDescriptor) {
   return {
       ...descriptor,
       /** 重写方法 */
       async value(...arg){
            //arg就是传入的参数列表,可以直接在这里进行修改
            //....修改arg

            /** 应用原有逻辑得到原始返回结果 */
            const res=await descriptor.value.apply(target,arg)
            //在这里就可以对返回结果进行封装
            //.....对结果的处理操作
            return res
       }
   }
};