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 に答える