【问题标题】:Can we pass arguments to a coffeescript-class?我们可以将参数传递给咖啡脚本类吗?
【发布时间】:2013-06-11 22:38:00
【问题描述】:

是否有可能将一些arguments 传递给coffeescript 类iife

像这样的 CoffeeScript 类实例:

class App

结果通常是这样的:

App = (function() {

  function App() {}

  return App;

})();

但是,也许有一种方法可以使用一些参数填充匿名包装器,如下所示:

App = (function($) {

  function App() {}

  return App;

})(jQuery);

目前我将每个模块包装在一个多余的额外包装器中:

(($) ->
  class App
)(jQuery)

但我觉得这绝对不漂亮(就像 coffescript 通常那样)。

【问题讨论】:

  • 问题是 Coffeescript 在需要时在该闭包中传递了 _super 参数,所以我怀疑除了你现在正在做的事情之外还有其他方法。
  • 你也可以让它漂亮:do (doc = document) ->
  • @elclanrs do (doc = document) -> 仅在参数与 iife-caller 中的参数相同时有效。对不起我的错,更新了我的问题。

标签: javascript coffeescript arguments anonymous-function iife


【解决方案1】:

你可以这样做

class A extends GenericClass("some_parameter")

其中 GenericClass 被定义为

GenericClass = (params) ->
    return { some: objects }

老实说,我不会这样做,因为它完全使您尝试做的事情变得不透明。 也许您可以从功能/业务价值方面解释您尝试做的事情,而不是在 CoffeeScript 语法方面?

【讨论】:

  • 不错的解决方法!然而,这对我来说似乎不是很咖啡;)
  • 嗯,不知道!只要我不明白你到底试图完成什么,如果它或多或少有点咖啡味,就很难说。一般来说,如果您尝试注入一些代码,我会尝试使用一些类方法调用
【解决方案2】:

我认为 elclanrs 的评论是您正在寻找的答案。

在咖啡脚本中,do ($) -> 将编译为 (function($){ … })($)

do ($ = jQuery) -> 将编译为(function($){ … })(jQuery)

真的没有比这更干净的方法了。它位于文件顶部的一行,非常清楚您在做什么。

do ($ = jQuery) ->
  class App

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-01
    • 1970-01-01
    • 2014-08-12
    • 2011-09-15
    • 1970-01-01
    • 2019-03-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多