我看到babel.js装饰器(在"阶段1和#34中可用;)在https://github.com/wycats/javascript-decorators实现规范。看起来装饰器仅限于(1)类,(2)访问器和(3)方法。就我而言,我想在普通的函数上使用装饰器,就像在
中一样@chainable
function foo() { }
其中(只是一个例子)
function chainable(fn) {
return function() {
fn.apply(this, arguments);
return this;
};
}
我没有看到装饰器不能应用于功能的任何逻辑原因。我的问题是,有没有办法实现这一目标?还是有一些很好的理由为什么函数不能被装饰?
事实证明,https://github.com/wycats/javascript-decorators/issues/4已经提出了一个问题。
答案 0 :(得分:26)
要执行一个装饰器,你要计算一个表达式,这样做可以防止提升(即使对于一个变量声明,一个赋值的右边也会保持不变)。因此,它与提升的函数声明不兼容。
作为解决方法,我建议可以启用函数表达式,生成器函数表达式和箭头函数来装饰:
const func = @someDecorator('abc') (x, y) => { return x + y };
唉,这并没有得到很多热情:https://esdiscuss.org/topic/decorators-for-functions
答案 1 :(得分:6)
你当然有一点意见。
但是neo_blackcap pointed out,函数装饰器不是ES7 decorators draft的一部分。
因此,您可以做的最好的事情是start discussion on the corresponding tracker以吸引社区关注您的提案。
ES7修饰符在first stage of development上,这意味着它们的API仍在开发中,可能会发生任何变化。
答案 2 :(得分:2)
我认为问题是功能装饰器还没有被ES7草案。
当然,您仍然可以自己实现功能装饰器