0

我不知道如何访问该值,这是我的代码:

function Filters()
{
    this.filters = ["filter_1", "filter_2", "filter_3"];
    this.someData = "test";
    this.draw = draw;
    function draw(){
        for(var i=0; i<this.filters.length;i++)
        {
            var filter = this.filters[i];
            $("#" + filter).click(function(){
                doSomething();
            });
        }
    }
    function doSomething(){
        alert(this.someData);
    }
}

我知道,因为doSomething()从闭包中调用,this.将引用一个正在处理的 JQuery 对象。那么如何才能someData在该函数/闭包中使用我的对象呢?似乎无法弄清楚。
感谢帮助 :)

4

1 回答 1

1

不,this里面doSomething将是全局对象。您需要this在单独的变量中保留对的引用:

function Filters()
{
    var that = this; // reference to this
    this.filters = ["filter_1", "filter_2", "filter_3"];
    this.someData = "test";
    this.draw = draw;
    function draw(){
        for(var i=0; i<this.filters.length;i++)
        {
            var filter = this.filters[i];
            $("#" + filter).click(function(){
                doSomething();
            });
        }
    }
    function doSomething(){
        alert(that.someData);
    }
}

与您的问题无关:您还可以将引用doSomething作为事件侦听器传递,而不是将其包装在另一个函数中:

$("#" + filter).click(doSomething);
于 2013-09-24T16:09:38.187 回答