如何用CoffeeScript写$(this)?

时间:2013-11-20 03:55:36

标签: javascript coffeescript this

我的CoffeeScript代码:

a = (argu='.a') =>
    $(argu).on 'click', () =>
        $(this)

编译为Javascript:

var a,
    _this = this;

a = function(argu) {
    if (argu == null) {
        argu = '.a';
    }
    return $(argu).on('click', function() {
        return $(_this);
    });
};

我希望this是$(争论)或$(' .a')不是_this。

如何写这个'可以参考$(争论)?

1 个答案:

答案 0 :(得分:5)

内部fat arrow=>)是您在点击处理程序中以_this结尾的原因。如果你使用普通箭头,你会得到你想要的东西:

a = (argu='.a') =>
    $(argu).on 'click', -> # you can also remove the empty ()s
        $(this)

编译为

var a,
  _this = this;

a = function(argu) {
  if (argu == null) {
    argu = '.a';
  }
  return $(argu).on('click', function() {
    return $(this);
  });
};

这是因为

  

胖箭头=>可用于定义一个函数,并将其当场绑定到此函数的当前值。

而“瘦”箭头定义了一个函数,但没有将它绑定到特定的上下文。


现在,如果确实希望回调中的this$(argu) - 请注意,这会成为非惯用的jQuery,因为回调中的this < em>不会引用点击的元素 - 您可以执行以下操作:

a = (argu='.a') =>
    $argu = $(argu)
    $argu.on 'click', (-> $(this)).bind($argu)

要明确:我不建议这样做。