胖箭重复?

时间:2013-03-26 12:45:08

标签: javascript coffeescript arrow-functions

当我写咖啡脚本时,我倾向于这么做(伪代码):

$link.click (e) =>
  this._clicked(e)

在CoffeeScript中是否真的没有办法透明地绑定?我希望能够做到:

$link.click =this._clicked

或其他东西,它会将我的this._clicked方法直接绑定到事件,保持其指针

任何想法?

更新

_clicked将被定义为:

_clicked: (e) ->
  # some code

1 个答案:

答案 0 :(得分:2)

coffeescript没什么特别的。只是做

$link.click @_clicked

然后将_clicked定义为

_clicked: (e) =>
  # some code

它会将this._clicked作为link点击事件的处理程序传递。

你可以传递任何函数作为这样的回调。关键点是不执行函数(@_clicked中没有())。 JS中的函数是一个普通变量,可以作为参数传递给其他函数。

使用

$link.click ->

你只需将函数直接传递给.click而不将其存储到变量中。

要保持this define @_clicked with a fat arrow,或使用JavaScripts bind function,它会返回this绑定到某个值的函数。

CoffeeScript没有为JavaScript添加任何额外功能。胖箭头只是从链接中执行类似于bind函数的绑定(如果它在类的方法定义中使用),或者只是在函数内定义函数时执行var _this = this技巧。