エラーのあるこのフィドルがあります --> http://jsfiddle.net/Osoascam/AkZZr/6/ (これはエラーのないバージョンです) --> http://jsfiddle.net/Osoascam/AkZZr/7 /
その中には、モジュール (メイン アプリケーションと同様)、Module.AjaxInterfaceAjax 呼び出し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()。今、pretendRenderで私はこれを持っています:
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、私が本当に望んでいるのは、何が起こっているのかを真に理解し、エレガントなソリューションを作成することです.