【问题标题】:Method chaining with function arguments带有函数参数的方法链接
【发布时间】:2011-07-05 21:03:02
【问题描述】:

在 CoffeeScript 中链接方法的最佳方式是什么?例如,如果我有这个 JavaScript,我怎么能用 CoffeeScript 编写它?

var req = $.get('foo.htm')
  .success(function( response ){
    // do something
    // ...
  })
  .error(function(){
    // do something
    // ...
  });

【问题讨论】:

    标签: javascript syntax coffeescript


    【解决方案1】:

    您可以采用两种方法:CoffeeScript 的最佳“字面”翻译是(在我看来)

    req = $.get('foo.htm')
      .success((response) ->
        # do something
      )
      .error( ->
        # do something
      )
    

    另一种方法是移动内联函数“大纲”,这是 Jeremy Ashkenas(CoffeeScript 的创建者)通常喜欢用于非平凡函数参数的样式:

    onSuccess = (response) ->
      # doSomething
    
    onError = ->
      # doSomething
    
    req = $.get('foo.htm').success(onSuccess).error(onError)
    

    successerror 回调有几行长时,后一种方法往往更具可读性;如果它们只是 1-2 衬里,前者很棒。

    【讨论】:

    • +1 表示“大纲”提示,绝对让代码更具可读性。
    【解决方案2】:

    我有时更喜欢使用更少的括号而不是链接,所以我会修改 Trevor 的最后一个示例:

    req = $.get 'foo.htm'
    req.success (response) -> # do something
    req.error -> # do something
    

    【讨论】:

    • 这与链式不同,因为每次都在使用 req 对象
    【解决方案3】:

    使用the latest CoffeeScript,如下:

    req = $.get 'foo.html'
      .success (response) ->
        do_something()
      .error (response) ->
        do_something()
    

    ...编译为:

    var req;
    req = $.get('foo.html').success(function(response) {
      return do_something();
    }).error(function(response) {
      return do_something();
    });
    

    【讨论】:

    • 这太棒了。谢谢,这是一种将运算符放在下一行而不是笨拙的尾随语法的语言。万岁!
    • 值得注意的是,Coffeescript 1.7 中的 'foo.html' 周围不再需要括号(请参阅下面的答案)
    【解决方案4】:

    从 Coffeescript 1.7 开始,链接已经大大简化,您不需要这里提到的任何与括号相关的变通方法。你上面的例子现在可以写成

    req = $.get 'foo.htm'
    .success ( response ) ->
      alert "success"
    .error ->
      alert "error"
    

    编译成

    var req;
    
    req = $.get('foo.htm').success(function(response) {
      return alert("success");
    }).error(function() {
      return alert("error");
    });
    

    您可以在此处查看有关此功能和其他 CS 1.7 功能的说明:https://gist.github.com/aseemk/8637896

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-21
      • 2016-06-01
      • 2021-06-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多