从javascript闭包中访问对象的值

时间:2013-09-24 16:06:40

标签: javascript object closures

我无法获取如何访问该值,这是我的代码:

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.之后,someData将引用正在处理的JQuery对象。那么如何才能在该函数/闭包中使用我的对象中的{{1}}?似乎无法弄明白。
感谢您的帮助:)

1 个答案:

答案 0 :(得分: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);