首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >jQuery $.proxy范围

jQuery $.proxy范围
EN

Stack Overflow用户
提问于 2012-12-05 11:35:23
回答 1查看 157关注 0票数 1

我有以下代码:

代码语言:javascript
复制
bindEvents: function() {
    $('#weight').click($.proxy(function(){
        this.changeWeight($('#weight').is(':checked'));
    },this));
    $('#produce').change($.proxy(function(){
        this.changeProduce();
    },this));
    $('.help-gtin').click($.proxy(function(){
        if ($('#help-gtin').is(':hidden')) {
            $('#help-gtin').slideDown();
        } else {
            $('#help-gtin').slideUp();
        }
        this.refreshGtin();
    },this);

    $('[name="order_production"]').click($.proxy(function(){
        this.changeProduction();
    },this));

},

如何减少重复代码$.proxy调用,因为bindEvents中的所有方法都需要在this作用域中调用?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-12-05 11:37:48

利用它们已经是闭包的事实,设置一个等于this的变量,然后使用该变量:

代码语言:javascript
复制
bindEvents: function() {
    var self = this; // <==== Set the variable

    $('#weight').click(function(){
        // v--- Use it (throughout)
        self.changeWeight($('#weight').is(':checked'));
    });
    $('#produce').change(function(){
        self.changeProduce();
    });
    $('.help-gtin').click(function(){
        if ($('#help-gtin').is(':hidden')) {
            $('#help-gtin').slideDown();
        } else {
            $('#help-gtin').slideUp();
        }
        self.refreshGtin();
    });

    $('[name="order_production"]').click(function(){
        self.changeProduction();
    });

},

bindEvents中定义的所有函数“关闭”调用bindEvents的上下文,并访问与该调用相关的局部变量。与this不同,这些变量不取决于函数的调用方式。

这也有一个优点,您可以在事件处理程序中使用this (它的jQuery含义是连接事件的元素)(这将节省您再次查找它,例如在#weight上的click处理程序中)。

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

https://stackoverflow.com/questions/13722376

复制
相关文章

相似问题

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