函数上的装饰器



我看到babel.js装饰器(在"阶段1"中可用)在https://github.com/wycats/javascript-decorators上实现了规范。看起来装饰器仅限于(1)类、(2)访问器和(3)方法。在我的例子中,我想在普通的旧的函数上使用装饰符,如

@chainable
function foo() { }

where(只是一个例子)

function chainable(fn) {
  return function() {
    fn.apply(this, arguments);
    return this;
  };
}

我看不出任何逻辑上的理由为什么装饰器不能应用于函数。我的问题是,有没有办法做到这一点?还是有一些很好的理由为什么功能不能装饰?

结果在https://github.com/wycats/javascript-decorators/issues/4上对此提出了一个问题。

要执行decorator,需要对表达式求值,这样做可以防止提升(即使对于变量声明,赋值的右侧也保持不变)。因此,它与被提升的函数声明不兼容。

作为一种解决方法,我建议函数表达式、生成器函数表达式和箭头函数可以被修饰:

const func = @someDecorator('abc') (x, y) => { return x + y };

唉,这并没有引起太大的热情:函数

的装饰器

你说得有道理。

但是正如neo_blackcap所指出的,函数装饰器不是ES7装饰器草案的一部分。

所以,你能做的最好的事情就是在相应的跟踪器上开始讨论,以吸引社区对你的提案的关注。

ES7装饰器处于第一开发阶段第二开发阶段,这意味着它们的API仍在开发中,可能会发生任何变化。

我认为问题是函数装饰器还没有ES7草案。

当然,你仍然可以自己实现你的函数装饰器

最新更新