//装饰器的学习
// 通过装饰器可以拿到目标类,同时为他增加一些额外的属性或者方法
//甚至修改内部的描述,对类做些扩展
//@speak 装饰器在类的外部
class Boy{
@speak('中文') //无论是在类的内部还是外部都是对这个类装饰
run(){
console.log('i can speak' + this.lan)
console.log('i can run')
}
}
//target 目标就是@speak 被装饰的这个Boy类
//并且在new Boy的时候就执行了speak
//key装饰器在这个类里面所修饰的方法 run()
//descriptor{writable:true,enumerable:false,configurable:true}
function speak(lan){
return function (target,key,descriptor){
console.log(target) //Boy{}
console.log(key) //run
console.log(descriptor) //{ }
target.lan=lan
return descriptor
}
}
const luke = new Boy()
luke.run() // i can speak 中文
// i can run