0

私はこのクラス構造を持っています(多かれ少なかれ):

function DataLoader = function () {
    this.setup = function () {
        this.page = new Page();
        this.page.setup();
    };

    Page = function () {
        this.apiSelect = null;
        this.onchangelistener = function () {
            //---------------- look here ---------------
            console.log(this.apiSelect); //Why is this.apiSelect undefined?
            //---------------- look here ---------------
        };

        this.setup = function () {
            this.apiSelect = document.getElementById("foo");
            //This is also weird to me, I had to do it like this
            //to get the functionality I wanted...
            document.getElementById("foo").onchange = this.onchangelistener;
        };
    };
};

var dl = new DataLoader();
dl.setup();

私はJavascriptに非常に慣れていないため、まだ詳細についてはあまり知りませんが、これは私には非常に奇妙に思えます。onchange イベントが発生すると、onchangelistener が呼び出されます。this.apiSelect が定義されていないのはなぜですか? 私はすでにそれに値を追加したことを意味します。

私の現在のコードは次のようになります

4

2 に答える 2

1
 ...
 Page = function () {
        var self = this;
        this.apiSelect = null;
        this.onchangelistener = function () {
            console.log(self.apiSelect);
        };

関数内onchangelistenerの参照は、外側のスコープthisと同じではありません。thisしたがって、外側への参照を作成しthis(with var self = this;)、関数内で使用する必要があります。

于 2012-09-19T14:41:58.917 に答える
0
Page = function () {
        var apiSelect = null;
        this.onchangelistener = function () {
            console.log(apiSelect);
        };
        ...
};

これは、 が新しい「内部」関数にバインドされていて、データ メンバーがthis何であるかわからなかったために発生していました。apiSelect

于 2012-09-19T14:43:09.313 に答える