44 javascript decorator babeljs ecmascript-next javascript-decorators
我看到babel.js装饰器(在"第1阶段"中可用)在https://github.com/wycats/javascript-decorators上实现了规范.看起来装饰器仅限于(1)类,(2)访问器和(3)方法.在我的例子中,我想在普通的旧函数上使用装饰器,如
@chainable
function foo() { }
Run Code Online (Sandbox Code Playgroud)
在哪里(只是一个例子)
function chainable(fn) {
return function() {
fn.apply(this, arguments);
return this;
};
}
Run Code Online (Sandbox Code Playgroud)
我没有看到装饰器不能应用于函数的任何逻辑原因.我的问题是,有没有办法实现这一目标?还是有一些很好的理由为什么功能无法装饰?
事实证明,在https://github.com/wycats/javascript-decorators/issues/4上存在一个问题.
Axe*_*yer 26
要执行装饰器,您要计算表达式并执行此操作以防止提升(即使对于变量声明,也会保留赋值的右侧).因此,它与提升的功能声明不兼容.
作为解决方法,我建议可以启用函数表达式,生成器函数表达式和箭头函数进行装饰:
const func = @someDecorator('abc') (x, y) => { return x + y };
Run Code Online (Sandbox Code Playgroud)
唉,这并没有得到很多热情:https://esdiscuss.org/topic/decorators-for-functions
你当然有一点意见.
但正如neo_blackcap指出的那样,函数装饰器不是ES7装饰器草稿的一部分.
因此,您可以做的最好的事情是开始讨论相应的跟踪器,以吸引社区关注您的提案.
ES7装饰器处于开发的第一阶段,这意味着它们的API仍处于开发阶段,可能会发生任何变化.
我认为问题是函数装饰器还没有成为 ES7 草案。
当然,你仍然可以自己实现你的函数装饰器