【问题标题】:Fat arrow repetition?胖箭重复?
【发布时间】:2013-03-16 06:26:24
【问题描述】:

当我写咖啡脚本时,我经常会这样做(伪代码):

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

真的没有办法在 CoffeeScript 中进行透明绑定吗?我希望能够做到:

$link.click =this._clicked

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

有什么想法吗?

更新

_clicked 将被定义为:

_clicked: (e) ->
  # some code

【问题讨论】:

  • 但是您的_clicked 函数是在没有粗箭头的情况下定义的?这可能是问题所在。
  • 哦..我什至不知道我能做到这一点?函数定义上的粗箭头 - 我会看看这个!
  • Bergi,给我这个答案,我会接受 :)
  • 另请参阅此讨论和我的回答:stackoverflow.com/a/17431824/517371

标签: javascript coffeescript arrow-functions


【解决方案1】:

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 添加任何额外的功能。 Fat 箭头只是执行类似于链接中的bind 函数的绑定(如果它用于类的方法定义中),或者只是在函数内部定义函数时执行var _this = this 技巧。

【讨论】:

  • 这不是我的意思,尽管你可以使用@_clicked 来代替这个功能。我一直将它视为一种实例变量(我知道函数是,但感觉不同,来自 ruby​​)
猜你喜欢
  • 1970-01-01
  • 2017-04-26
  • 1970-01-01
  • 2023-03-12
  • 2016-09-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多