javascript - 我今天如何使用装饰器?

标签 javascript ecmascript-next angularjs-decorator javascript-decorators

我看到今天已经在一些 javascript 代码中使用了装饰器。我的问题实际上是两个方面。

第一的:

如果装饰器还没有最终确定,那么今天如何在生产代码中使用它们呢?浏览器支持会不存在吗?

第二:

鉴于今天可以使用它,正如一些开源项目所建议的那样,让装饰器工作的典型推荐设置是什么?

最佳答案

没错,ES2016 装饰器还不是规范的一部分。但这并不意味着我们今天不能使用它。

首先让我们退后一步,回顾一下“什么是装饰器”。装饰器只是将行为添加到对象的包装器。这不是javascript(或一般编程)中的新概念,它实际上已经存在了一段时间......

这是检查权限的装饰器的基本示例:

function AuthorizationDecorator(protectedFunction) {
    return function() {
        if (user.isTrusted()) {
            protectedFunction();
        } else {
            console.log('Hey! No cheating!');
        }
    }
}

使用它看起来像这样:
AuthorizationDecorator(save);

你看我们所做的只是简单地包装一些其他的功能。您甚至可以通过多个装饰器传递一个函数,每个装饰器添加一个功能或运行一些代码。

你甚至可以找到一些 old articles解释 javascript 中的装饰器模式。

既然我们了解装饰器实际上是我们(javascript 社区)一直能够做到的事情,那么当我们今天使用 ES2016 装饰器时,它们只是被编译成 ES5 代码,因此您保持浏览器兼容性可能并不令人震惊。所以暂时它只是语法糖(我可能会添加一些非常甜的糖)。

至于使用哪个编译器将您的 ES2016 代码转换为 ES5 代码,您有一些选择:BabelTraceur是最受欢迎的。

这是关于 Exploring ES2016 Decorators 的进一步阅读.

关于javascript - 我今天如何使用装饰器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34461548/

相关文章:

javascript - CKEditor 3.6.3 - 样式有问题

javascript - 失败的 JavaScript onMouseOver 事件

javascript - 跨浏览器样式 "choose file"按钮

javascript - ES6 类属性定义

javascript - 如何使 ES6 类最终(不可子类化)

javascript - 什么是 "decorators"以及它们是如何使用的?

javascript - 我怎么知道 keydown 会导致 keypress 事件,在那种情况下忽略它?

javascript - JS : Call async function before exporting something

angularjs - 如何测试 Angular 装饰器功能

angular - 两种方式传递数据