首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >从jQuery回调引用CoffeeScript中的父类

从jQuery回调引用CoffeeScript中的父类
EN

Stack Overflow用户
提问于 2011-10-11 02:08:55
回答 2查看 3.8K关注 0票数 7

我是CoffeScript新手,我想知道是否有一种方法可以在不引用全局变量app的情况下编写以下代码:

代码语言:javascript
复制
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对象的引用,即

代码语言:javascript
复制
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) ->
        # ...

第一段代码可以工作,但如果可能的话,我想去掉全局变量:-)

干杯,加兹。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-11 02:29:48

您的单击处理程序将获得传入的事件...因此,您可以通过“胖箭头”获得两全其美的效果,而无需引用self

代码语言:javascript
复制
constructor: ->
    @ui = ui.init()
    $('#content-holder a[rel!=dialog]').live 'click', (e) =>
        link = $(e.target).attr 'href'
        @loadUrl link
        return false
票数 11
EN

Stack Overflow用户

发布于 2011-10-11 02:19:30

好吧,CS只是JS的高级语法。

在JS中,this只能引用单个对象。

胖箭头使用闭包使this等于更高级别的this,仅此而已,这就是为什么它在回调作用域中覆盖this的原因

相反,普通箭头只是一个function别名,这就是为什么在第一种情况下this是一个DOM元素。

最后,@something被简单地转换为this.something,并且没有做更多的事情。

所以,我的观点是-你最好的选择是在绑定之前做self = @

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7716849

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档