zoukankan      html  css  js  c++  java
  • ES6

     
     
    注意,修饰器对类的行为的改变,是代码编译时发生的,而不是在运行时。这意味着,修饰器能在编译阶段运行代码。也就是说,修饰器本质就是编译时执行的函数。
     
    修饰器是一个对类进行处理的函数。修饰器函数的第一个参数,就是所要修饰的目标类
     
    如果想添加实例属性,可以通过目标类的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 的在线转码。
     
     
  • 相关阅读:
    Linux 三剑客之SED
    搭建Docker环境
    Docker rabbitmq
    Docker Redis 集群
    Docker Mysql
    lerna 大前端项目代码重用解决方案
    将create-react-app从javascript迁移到typescript
    使用 React hooks 优雅解决 mp3 的播放 和 暂停
    React 代码 Import Svg as ReactComponent 失败
    vue3 自定义 hooks 优雅处理异步调用 ajax
  • 原文地址:https://www.cnblogs.com/jason-beijing/p/10327490.html
Copyright © 2011-2022 走看看