注意,修饰器对类的行为的改变,是代码编译时发生的,而不是在运行时。这意味着,修饰器能在编译阶段运行代码。也就是说,修饰器本质就是编译时执行的函数。
 
修饰器是一个对类进行处理的函数。修饰器函数的第一个参数,就是所要修饰的目标类
 
如果想添加实例属性,可以通过目标类的prototype对象操作。
把Foo类的方法添加到了MyClass的实例上面
可以用Object.assign()模拟这个功能。
方法的修饰
修饰器函数一共可以接受三个参数,第一个参数是所要修饰的目标对象,即类的实例(这不同于类的修饰,那种情况时target参数指的是类本身);第二个参数是所要修饰的属性名,第三个参数是该属性的描述对象。
方法修饰的作用
修改属性描述对象的enumerable属性,使得该属性不可遍历
@log修饰器,可以起到输出日志的作用
修饰器有注释的作用
不能应用于 函数
因为函数存在提升
core-decorator.js
autobind修饰器使得方法中的this对象,绑定原始对象
readonly修饰器使得属性或方法不可写。
override修饰器检查子类的方法,是否正确覆盖了父类的同名方法,如果不正确会报错
deprecate或deprecated修饰器在控制台显示一条警告,表示该方法将废除
suppressWarnings修饰器抑制deprecated修饰器导致的console.warn()调用。但是,异步代码发出的调用除外
使用修饰器实现自动发布事件
import publish from "path/to/decorators/publish";
 
class FooComponent {
  @publish("foo.some.message", "component")
  someMethod() {
    return {
      my: "data"
    };
  }
  @publish("foo.some.other")
  anotherMethod() {
    // ...
  }}
 
以后,只要调用someMethod或者anotherMethod,就会自动发出一个事件
Mixin
混入
Trait
Trait 也是一种修饰器,效果与 Mixin 类似,但是提供更多功能,比如防止同名方法的冲突、排除混入某些方法、为混入的方法起别名等等
Babel转码器
已经支持 Decorator
 
目前,Babel 转码器已经支持 Decorator。
首先,安装babel-core和babel-plugin-transform-decorators。由于后者包括在babel-preset-stage-0之中,所以改为安装babel-preset-stage-0亦可。
$ npm install babel-core babel-plugin-transform-decorators
然后,设置配置文件.babelrc。
{
"plugins": ["transform-decorators"]}
这时,Babel 就可以对 Decorator 转码了。
脚本中打开的命令如下。
babel.transform("code", {plugins: ["transform-decorators"]})
 
Babel 的官方网站提供一个在线转码器,只要勾选 Experimental,就能支持 Decorator 的在线转码。
 
 

最新文章

  1. Daily Scrum Meeting ——FourthDay
  2. android 入门-git之上传本地代码到github
  3. [ASE][Daily Scrum]11.21
  4. POJ 1088 滑雪 记忆化DP
  5. Amoeba实现mysql主从读写分离
  6. 布局动画 LayoutAnimation
  7. AsyncTask 与 对话框显示 view.WindowManager$BadTokenException: Unable to add window…is not valid; is your a
  8. 给js文件传递参数
  9. Cocos2d-x3.0 捕Android菜单键和返回键
  10. JDBC基本开发
  11. Java必须了解的“递归”与“IO流”!!!
  12. Java虚拟机一:运行时数据区域
  13. 浅析android系统设计中的回调思想
  14. cf 20190307 Codeforces Round #543 (Div. 2, based on Technocup 2019 Final Round)
  15. Git基础命令的使用——详细教程2
  16. (3) MySQL分区表使用方法
  17. js replace使用及正则表达式使用
  18. 自定义进度条渐变色View
  19. hibernate的findByExample 外键参数查询解决方案
  20. virtual box下安装ubuntu经验

热门文章

  1. Linux centos7 日常运维——使用w查看系统负载、vmstat命令、top命令、sar命令、nload命令
  2. 700k把web端程序包装为桌面程序
  3. Day9 - C - Bookshelf 2 POJ - 3628
  4. vue-i18n突然所有的都解析不出来了
  5. django+centos+mariadb读写分离完美实现(上)-mysql主从备份实现
  6. Lua 完美打印数据 (例子)
  7. Adapter之spinner
  8. 学习Linux系统永远都不晚
  9. springboot自定义属性文件与bean映射注入属性值
  10. vue :is 属性