【发布时间】:2017-02-04 04:24:42
【问题描述】:
我是“ES7”装饰器的新手(我的意思是由最初基于 ES7 装饰器提案的 Babel babel-plugin-transform-decorators-legacy 插件启用的装饰器),我对如何他们工作。我知道方法装饰器会修改方法,但我不清楚在此过程中会发生什么“副作用”。具体来说,我想知道装饰器是否可以生成export,即。我可以做一个这样的装饰器吗:
class Foo {
@export
bar() { doSomething(); }
}
生成:
export const bar = Foo.prototype.bar;
// or
export const bar = new (Foo()).bar;
或者:
class Foo {
@export
static bar() { doSomething(); }
}
到:
export const bar = Foo.bar;
简而言之,装饰者可以创建export 语句吗?
【问题讨论】:
-
导出应该在模块的顶部声明,以便它们可以静态分析。因此,即使您可以(它可能需要一些用于转译器的 hacky 插件,例如 Babel),您真的不应该这样做。
-
你为什么要导出一个方法?
-
一个模块可能会暴露一些东西,就好像它是一个静态函数一样,但是(在幕后)将该函数实现为(单例)对象的方法可能更有意义。
标签: decorator ecmascript-next babel-decorator