ts装饰器(了解)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/themagickeyjianan/article/details/87901013
/**
 * 装饰器: 就像给人外衣一样,添加装饰器; 但是在ts中装饰器还处在试验阶段
 *
 * 1.继承让子类实现更多功能这种方式,可能形成超类,很复杂,并不是好的方式
 *
 * 2.AOP(切面编程)
 *   1.静态注入方式
 *     1.继承让子类实现更多功能这种方式,可能形成超类,很复杂,并不是好的方式
 *     2.类、方法、属性
 *     3.ts使用静态注入方式
 *
 *   2.反射机制: 动态的把需要注入的代码注入到我们想要注入的地方
 *     1.java、c#等常用反射实现注解Reflect.decorate
 *
 * 3.符合开放封闭原则,类的解耦
 *   1.mvc权限判断
 *   2.注解
 *
 * 4.执行顺序
 *   1.属性
 *   2.方法
 *   3.外围的从下往上依次执行
 *
 * 5.根据tsconfig.json中的target配置不同, es5和es6输出的详细信息不同. es5不清楚  es6比较清楚一点
 *
 * 6.根据反射可以动态创建东西
 */

/**
 * 自定义一个Decorators
 * @param target 一个类的声明 class prototype
 * @param key    名称, 修饰的名字是什么 方法名等
 * @param desc   描述 元数据说明  对一个类的详细描述
 */
function validate(target: string, key: string, desc: PropertyDescriptor) {
    console.log("\nvalidate =", target, "\nkey =", key, "\ndesc =", desc);
}

function checkUser(target: string, key: string, desc: PropertyDescriptor) {
    console.log("\ncheckUser =", target, "\nkey =", key, "\ndesc =", desc);
}

function formatFunc(target: string, key: string, desc: PropertyDescriptor) {
    console.log("\nformatFunc =", target, "\nkey =", key, "\ndesc =", desc);
}

function test13(target: string, key: string, desc: PropertyDescriptor) {
    console.log("\ntest13 -->", target, "\nkey -->", key, "\ndesc -->", desc);
}

// 采用工厂方式创建装饰器
function testFactory(n: boolean) {
    return function (target: string, key: string, desc: PropertyDescriptor) {
        console.log("\n -->", target, "\nkey -->", key, "\ndesc -->", desc);
    }

}

@validate
@checkUser
@testFactory(false)
class Decorator {

    @formatFunc
    name: string = "";

    constructor(){

    }

    @test13
    method(): void{

    }
}

猜你喜欢

转载自blog.csdn.net/themagickeyjianan/article/details/87901013