ts中的装饰器
装饰器本质
装饰器是一个函数,系统会自动调用该函数来对类、方法、属性或参数进行修饰。
装饰器执行顺序
-
对于一个类,先执行类内部的装饰器然后指行类装饰器
-
对于一个方法,先执行参数装饰器然后指行方法的方法修饰器
案例
const MoveDecorator: ClassDecorator = (constructor: Function): void => {
console.log('move decorator')
}
const MusicDecorator: ClassDecorator = (constructor: Function): void => {
console.log('music decorator')
constructor.prototype.playMusic = (): void => {
console.log('decorator method called');
}
}
function Test0(...args: any[]){
console.log('test0')
}
function Test1(...args: any[]): void {
console.log('test1')
}
function Test2(...args: any[]): void {
console.log('test2')
}
function Test3(...args: any[]): void {
console.log('test3')
}
function Test4(...args: any[]) {
console.log('test4')
}
@MoveDecorator
@MusicDecorator
class Tank {
@Test0
site:string = "baidu.com"
playMusic() { console.log('class Music Method') }
@Test2
getInfo(name: string, @Test1 age: number): void {
}
@Test4
setInfo(@Test3 name: string) { }
}
new Tank().playMusic()
/*执行结果
test0
test1
test2
test3
test4
music decorator
move decorator
decorator method called
*/