エラーのあるこのフィドルがあります --> http://jsfiddle.net/Osoascam/AkZZr/6/ (これはエラーのないバージョンです) --> http://jsfiddle.net/Osoascam/AkZZr/7 /
その中には、モジュール (メイン アプリケーションと同様)、Module.AjaxInterface
Ajax 呼び出しModule.Modules.Inbox
を処理する 、電子メールの受信トレイに関連するタスクを実行する 、および Module.Pages.Gmail
ページを表示するためのいくつかのモジュールを処理する があります。これらはすべてモジュール パターンを使用して行われます。
これで、たくさんのコールバックがあることがわかります。this
これらの通話で何が起こるか知りたい...
私が得られないのは、this
参照に何が起こっているのか、どうすればそれを保存できるのかです:
getMessages: function(params) {
var parameters = params || {};
params = {
// Please note I'm using this, which equals the module
successCallback: this.pretendRender,
successCallbackParameters: parameters,
json: params.json
};
var test = new Module.AjaxInterface(params);
test.ajaxCall();
},
したがって、モジュール自体の内部の関数への呼び出しは機能します...次に、 を呼び出しtest.ajaxCalls
、その代わりに を呼び出しますpretendRender()
。今、pretendRende
rで私はこれを持っています:
pretendRender: function(data, parameters) {
// LINE 106 that is causing the ERROR
// It says "this.addColor() is not defined and THIS = window now
data.color = this.addColor();
parameters.successCallback(data);
},
addColor: function() {
return "#AD9";
}
私の質問は...this
参照に何が起こっているのですか? に変わるのはなぜwindow
ですか?どうすれば修正できますか?call
またはを使用できることはわかってapply
いますが、 関数pretendRender
が で呼び出されておりAjaxInterface
、 への参照Modules.Inbox
が失われています ( を使用しない限りcaller
、 では使用できません"strict"
)。私はそれを保存するために渡すことができることを知っていますthis
がAjaxInterface
、私が本当に望んでいるのは、何が起こっているのかを真に理解し、エレガントなソリューションを作成することです.