【问题标题】:How to export getter in ES6 module system [duplicate]如何在 ES6 模块系统中导出 getter [重复]
【发布时间】:2017-06-26 09:59:20
【问题描述】:

是否可以在导入/导出模块系统中导出getter?

export getter $topbar(){ return $('.topbar') }

如何实现?

编辑:

所以当我问这个问题时,我了解到每个变量都导出为by ref,因此任何导出的变量都充当吸气剂,并在每次检查时暴露新值。

这意味着更改模块中的变量值将更改每个导入模块中的值

【问题讨论】:

  • 您希望如何使用它?就像一个在评估时调用你的 getter 回调的变量?我认为这是不可能的。
  • 它看起来不像是重复的。另一个问题是关于导出模块的,我问的是exporting getter。我的问题很简单,另一个问题很复杂
  • @perymimon 我不确定你想如何导出“吸气剂”。 getter 始终是对象的一部分。你只想导出getter函数吗?
  • 我说的getter是指像变量一样的东西,但每次我们请求值时都会返回新值,即使是原始值也是如此。如果我们能够按需计算价值,那就更好了。

标签: javascript module ecmascript-6


【解决方案1】:

是否可以在导入/导出模块系统中导出getter?

这是不可能的。 ES6 模块无法导出 getter,因为它们甚至不导出值。 ES6 模块语法暴露一个局部变量,以便可以从模块外部访问它,但它甚至从不查看值。

这意味着你不能有一个 getter 用于任意变量,你也不能有一个 getter 用于导出。

唯一的选择是导出库用户需要调用的函数。

【讨论】:

  • soo.. 暴露变量几乎与暴露返回当前值的 getter 相同......有趣
  • 是的,因此您可以导出变量并重新分配它也会影响导入它的位置。但是,如果 topbar 元素实际上会发生变化,您将导出一个函数,以便您的代码的用户知道期望它会发生变化。我认为大多数人都希望导出的变量保持不变。
  • 它在初始化时会保持不变,但导出的东西会先于其他一切,所以...
  • 我不确定你在说什么。
【解决方案2】:

ES6 - Exporting module with a getter 的重复。

就这样做吧:

export function $topbar() { return $('.topbar') }

或者:

export const $topbar = () => $('.topbar');

【讨论】:

  • 但是每次使用该值都需要在任何地方使用标点括号 $topbar().append(...) 而不是 $topbar.append
  • @perymimon 好的。试试这个 - const $topbar = $('.topbar'); export $topbar;
  • 好的,但随后$topbar 只评估了一个。也许不是正确的时间。而不是每次都对使用进行评估并返回正确的值(不提及内存泄漏,因为硬引用)
猜你喜欢
  • 1970-01-01
  • 2018-03-13
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 2016-06-10
  • 1970-01-01
  • 2016-11-16
相关资源
最近更新 更多