1.装饰器的基本使用
//装饰器就是修饰类的一个函数//添加类的静态成员function fn(target){    target.foo='bar'}@fnclass Myclass{}console.log(Myclass.foo);//带参数的装饰器@fn2(10)class Mycfass{}function fn2(value){   return function(target){      target.count=value   }}console.log(Mycfass.count););
//在装饰器的实例上添加实例成员@fn3class Mycgass{}function fn3(target){  target.prototype.foo='my de'}console.log(new Mycgass().foo);
2.装饰器实现继承
//这里将list对象展开后,将其属性放到目标元素的原型上function mixin(...list){    return function(target){    Object.assign(target.prototype,...list)    }}const Foo={    foo(){        console.log('foo');    }}@mixin(Foo)class Myclass{}new Myclass().foo()
3.装饰器修饰类成员
//装饰器修饰类的内部成员class Mrclass{    @readonly message='heelo'    @noenumerable bar='fff'}function readonly(target,name,descriptor){    console.log(target);//目标类的prototype    console.log(name);//被修饰类成员的名称    console.log(descriptor);//被修饰的类成员的描述对象    //只读的    descriptor.writable=false}function noenumerable(target,name,descriptor){    console.log(target);//目标类的prototype    console.log(name);//被修饰类成员的名称    console.log(descriptor);//被修饰的类成员的描述对象    //不可以被遍历    descriptor.enumerable=false}const c=new Mrclass()console.log(c.message);for(let k in c){    console.log(c[k]);}