【问题标题】:How can one convert this to coffeescript? [closed]如何将其转换为咖啡脚本? [关闭]
【发布时间】:2012-10-24 04:22:54
【问题描述】:

我使用的是 js2coffee,但它似乎无法翻译,因为我收到了 unexpected identifier

$.fn.wait = function( ms, callback ) {
    return this.each(function() {
        window.setTimeout((function( self ) {
            return function() {
                callback.call( self );
            }
        }( this )), ms );
    });
};

我的咖啡版:

$.fn.wait = (ms, callback) ->
  @each ->
    window.setTimeout ((self) ->
      ->
        callback.call self
    (this)), ms

【问题讨论】:

    标签: jquery coffeescript


    【解决方案1】:

    首先清理您的 JavaScript 版本,以免它过于聪明和难以阅读;内联的自执行函数除了让维护和阅读您的代码的人讨厌您之外,真的对您没有任何帮助:

    $.fn.wait = function( ms, callback ) {
        return this.each(function() {
            var _this = this;
            window.setTimeout(function() {
                callback.call(_this);
            }, ms);
        });
    };
    

    这样一目了然,噪音更小,更容易理解。 var _this = this 技巧在 CoffeeScript 中通常被 fat-arrow (=>) 替换,所以我们只剩下这个:

    $.fn.wait = (ms, callback) ->
        @each(->
            fn = () => callback.call(@)
            setTimeout(fn, ms)
        )
    

    是的,括号在 CoffeeScript 中通常是可选的,但 optionalforbidden 是不同的词,所以我倾向于包含括号以使结构更易于查看。你也可以跳过fn 变量,像这样可怕:

    setTimeout(
        => callback.call(@)
    , ms)
    

    或者这个:

    setTimeout (=> callback.call(@)), ms
    

    但是在混合中加入一个额外的变量,IMO 会更容易。

    演示:

    【讨论】:

      【解决方案2】:

      使用粗箭头 (=>):

      $.fn.wait = (ms, callback) ->
        @each ->
          window.setTimeout( =>
            =>
              callback.call( this );
          , ms)
      

      它编译为:

      $.fn.wait = function(ms, callback) {
        return this.each(function() {
          var _this = this;
          return window.setTimeout(function() {
            return function() {
              return callback.call(_this);
            };
          }, ms);
        });
      };
      

      胖箭头 => 既可以用来定义一个函数,也可以用来绑定它 到现在这个值,就当场了。这在以下情况下很有帮助 使用基于回调的库(如 Prototype 或 jQuery)来创建 要传递给每个的迭代器函数,或要使用的事件处理函数 与绑定。用粗箭头创建的函数可以访问 定义它们的 this 的属性。

      (来源:http://coffeescript.org/#fat_arrow

      【讨论】:

      • 使用@mu-is-too-short 清理过的版本,更好:)
      猜你喜欢
      • 2013-09-03
      • 1970-01-01
      • 2013-11-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-27
      • 1970-01-01
      • 2014-02-15
      相关资源
      最近更新 更多