我的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。
如何写这个'可以参考$(争论)?
答案 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)
要明确:我不建议这样做。