Skip to content

类的装饰器

js
// 1、基本概念
// 类的装饰器就是一个函数
// 通过@来使用
// 装饰器decorator接收类的constructor作为参数,作用在于扩展类的方法、属性等。一个类可以有多个装饰器。

function decorator1(constructor: any) {
    constructor.prototype.getName = function() {
        return 'chaos'
    }
}

function decorator2(constructor: any) {
    constructor.prototype.getAge = function() {
        return '18'
    }
}

@decorator1 // 类的装饰器就是一个函数
@decorator2 // 装饰器可以有多个,它的执行顺序是从后往前【注意:构造函数先执行,再执行装饰器】
class Test {}

const test = new Test()

console.log((test as any).getName())
console.log((test as any).getAge())

// 2、装饰器可以传值【工厂函数,生产装饰器】
function genDecorator(p1: boolean) {
    return function(constructor: any) {
        if(p1) {
            constructor.age = 18
        }else {
            constructor.age = 1
        }
    }
}

@genDecorator(true) // 可以传值与调用
class Test {}