[TOC] >[success] # 装饰器讲解 ~~~ 1.学过'pyhon' 的开发可能对装饰器比较熟,在'es7'也提出装饰的语法糖 2.装饰器模式,顾名思义,就是将某个类重新装扮下,使它在功能上更强 大,但是作为原来的这个类,使用者不应该感受到装饰前与装饰后有什么 不同,否则就破坏了原有类的结构,所以装饰器模式要做到对装饰类的使 用者透明 ~~~ >[danger] ## 声明 ~~~ 1.本讲解根据找到的参考资料进行重新理解分析归纳,感谢参考文章的作者 整理的文章内容 ~~~ >[info] ## 装饰器 * 参考资料: [阮一峰的装饰器讲解]([http://es6.ruanyifeng.com/#docs/decorator](http://es6.ruanyifeng.com/#docs/decorator)) [关于装饰器的提案](https://github.com/tc39/proposal-decorators) [掘金-- 小芋头君](https://juejin.im/post/59f1c484f265da431c6f8940) [IMWeb -- Jianglinyuan](https://imweb.io/topic/5b1403bbd4c96b9b1b4c4e9e) ~~~ 1.根据'阮一峰'老师es6入门中说的,Decorator 提案经过了大幅修改, 目前还没有定案,不知道语法会不会再变。 2.修饰器只能用于类和类的方法,不能用于函数,因为存在函数提升。 3.根据我所现阶段接触的文章, 4.装饰器的写法第一种'@'+'函数名',修饰在要被修饰的'类','类中的属性' ,'类中的方法'上 5.装饰器的写法第二种'@'+'函数',修饰在要被修饰的'类','类中的属性' ,'类中的方法'上 6.要注意装饰器 本身后面函数是没有括号的,有括号的是用了工厂方式,返回了 一个函数 ~~~ * 对第四条详解讲解 ~~~ // 定义的函数 function test(){ //.... } // 注意这里的test只是方法名字 @test class MyClass{} ~~~ * 对第五条的讲解利用工厂模式 ~~~ // 定义的函数 function test(){ return function(target){ // ... } } // 注意这里的test()函数利用工厂模式 // 实际最后执行的装饰器是该函数的内部返回的函数 @test() class MyClass{} ~~~