我是CoffeScript新手,我想知道是否有一种方法可以在不引用全局变量app的情况下编写以下代码:
class App
constructor: ->
@ui = ui.init()
$('#content-holder a[rel!=dialog]').live 'click', ->
link = $(@).attr 'href'
app.loadUrl link
return false
loadUrl: (href) ->
# ...
app = new App()使用胖箭头不起作用,因为我丢失了对jQuery对象的引用,即
class App
constructor: ->
@ui = ui.init()
$('#content-holder a[rel!=dialog]').live 'click', =>
# @ now references App
link = $(@).attr 'href'
this.loadUrl link
return false
loadUrl: (href) ->
# ...第一段代码可以工作,但如果可能的话,我想去掉全局变量:-)
干杯,加兹。
发布于 2011-10-11 02:29:48
您的单击处理程序将获得传入的事件...因此,您可以通过“胖箭头”获得两全其美的效果,而无需引用self:
constructor: ->
@ui = ui.init()
$('#content-holder a[rel!=dialog]').live 'click', (e) =>
link = $(e.target).attr 'href'
@loadUrl link
return false发布于 2011-10-11 02:19:30
好吧,CS只是JS的高级语法。
在JS中,this只能引用单个对象。
胖箭头使用闭包使this等于更高级别的this,仅此而已,这就是为什么它在回调作用域中覆盖this的原因
相反,普通箭头只是一个function别名,这就是为什么在第一种情况下this是一个DOM元素。
最后,@something被简单地转换为this.something,并且没有做更多的事情。
所以,我的观点是-你最好的选择是在绑定之前做self = @。
https://stackoverflow.com/questions/7716849
复制相似问题