ES6为类提供修改行为的修饰器函数Decorator,修饰器是一个对类进行处理的函数,它的第一个参数就是要修饰的类,如果一个参数不够的话可以在修饰器外层再封装一层函数。那么大致只有一个参数的修饰器是这样的 function fun(target){...} @fun Class A{}, function fun(obj){return function(target){...}} @fun(obj) Class A{}。注意修饰器对类的行为改变是在编译时而不是运行时,意味着修饰器本质是编译时执行的函数。
修饰器不仅可以修饰类,还可以修饰类中的属性。当修饰类中的属性时可以接受三个参数,第一个参数是所要修饰的目标对象,即类的实例,第二个参数是所要修饰的属性名,第三个参数是该属性的描述对象。如果同一个方法有多个修饰器修饰,那么执行的过程中会先从最外层的修饰器进入从最里层的修饰器执行。修饰器不能用于函数,因为存在函数提升,因为在执行函数的修饰时 ,因为函数的提升造成修饰还没有执行就去执行函数。
core-decorator.js是一个第三方模块,提供几个常见的修饰器。@autobind使得方法中的this对象绑定原始对象;@readonly使得属性或方法不可写;override检查子类方法,是否正确覆盖父类的同名方法,如果不正确报错;@deprecate在控制台显示一条警告,表示该方法已废除;@suppressWarnings抑制@deprecate修饰器的console.warn的调用,但是异步代码发出的调用除外。@Mixin 和 @Trait 等等。
反正下面的方法就是具体的一些计算的或者别的用途的实现机制,转换成修饰器。