Javascript 在jquery中调用对象方法每个循环范围问题?

Javascript 在jquery中调用对象方法每个循环范围问题?,javascript,jquery,Javascript,Jquery,所以我在说 未定义HandleGendClick 我假设这是一个范围问题,但我不确定如何在循环中引用回父对象…问题是这是调用click事件处理程序时的窗口 您可以这样做: My.Awesome.Obj = function() { return { // PUBLIC PROPERTIES legendObj: null, // PUBLIC METHODS init: function() {

所以我在说

未定义HandleGendClick

我假设这是一个范围问题,但我不确定如何在循环中引用回父对象…

问题是这是调用click事件处理程序时的窗口

您可以这样做:

My.Awesome.Obj = function() {
    return {
        // PUBLIC PROPERTIES
        legendObj:  null,

        // PUBLIC METHODS
        init: function() {
            this.assignLegendClick();
        },

        assignLegendClick: function() {
            console.log('*** drawLegend()');
            var checkboxes = this.legendObj.find("input");
            checkboxes.each(function() {
                $(this).click(function() {
                    this.handleLegendClick();
                });
            })
        },

        handleLegendClick: function() {
            console.log('*** handleLegendClick()');
        },

        EOF: null
    };
}();
问题是,这是调用click事件处理程序时的窗口

您可以这样做:

My.Awesome.Obj = function() {
    return {
        // PUBLIC PROPERTIES
        legendObj:  null,

        // PUBLIC METHODS
        init: function() {
            this.assignLegendClick();
        },

        assignLegendClick: function() {
            console.log('*** drawLegend()');
            var checkboxes = this.legendObj.find("input");
            checkboxes.each(function() {
                $(this).click(function() {
                    this.handleLegendClick();
                });
            })
        },

        handleLegendClick: function() {
            console.log('*** handleLegendClick()');
        },

        EOF: null
    };
}();

是的,这是一个范围界定问题:

My.Awesome.Obj = function() {
    var obj = {
        // PUBLIC PROPERTIES
        legendObj:  null,

        // PUBLIC METHODS
        init: function() {
            obj.assignLegendClick();
        },

        assignLegendClick: function() {
            console.log('*** drawLegend()');
            var checkboxes = obj.legendObj.find("input");
            checkboxes.each(function() {
                $(this).click(function() {
                    obj.handleLegendClick(); // <=== replace this with obj
                });
            })
        },

        handleLegendClick: function() {
            console.log('*** handleLegendClick()');
        },

        EOF: null
    };
    return obj;
}();
使用helper参数保留通常称为self或_self的范围

assignLegendClick: function() {
  console.log('*** drawLegend()');
  var checkboxes = this.legendObj.find("input");
  checkboxes.each(function() {
    $(this).click(function() {
      this.handleLegendClick();
    });
  })

是的,这是一个范围界定问题:

My.Awesome.Obj = function() {
    var obj = {
        // PUBLIC PROPERTIES
        legendObj:  null,

        // PUBLIC METHODS
        init: function() {
            obj.assignLegendClick();
        },

        assignLegendClick: function() {
            console.log('*** drawLegend()');
            var checkboxes = obj.legendObj.find("input");
            checkboxes.each(function() {
                $(this).click(function() {
                    obj.handleLegendClick(); // <=== replace this with obj
                });
            })
        },

        handleLegendClick: function() {
            console.log('*** handleLegendClick()');
        },

        EOF: null
    };
    return obj;
}();
使用helper参数保留通常称为self或_self的范围

assignLegendClick: function() {
  console.log('*** drawLegend()');
  var checkboxes = this.legendObj.find("input");
  checkboxes.each(function() {
    $(this).click(function() {
      this.handleLegendClick();
    });
  })

不需要调用obj.legendObj.find。。。在assignLegendClick函数中,因为此时“this”是对象。@Here and Now 78事实上,这取决于调用函数的方式:如果复制引用并在没有接收者的情况下调用它,这将确保它是obj。但在大多数情况下,我同意这是没有用的,这就是为什么我只提到我发表评论的地方,这是最重要的地方。@destroy you太快了,我还得等着才能接受!不需要调用obj.legendObj.find。。。在assignLegendClick函数中,因为此时“this”是对象。@Here and Now 78事实上,这取决于调用函数的方式:如果复制引用并在没有接收者的情况下调用它,这将确保它是obj。但在大多数情况下,我同意这是没有用的,这就是为什么我只提到我发表评论的地方,这是最重要的地方。@destroy you太快了,我还得等着才能接受!