Избегайте потери этой ссылки и объяснения причин

У меня есть скрипка с ошибкой -> http://jsfiddle.net/Osoascam/AkZZr/6/ (Это версия без ошибки) -> http://jsfiddle.net/Osoascam/AkZZr/7/

В нем есть модуль (например, основное приложение), Module.AjaxInterface , который работает с вызовами Ajax, Module.Modules.Inbox (который выполняет задачи, связанные с почтовым ящиком) и Module.Pages .Gmail , который имеет дело с несколькими модулями для отображения страницы.Все это делается с помощью шаблона модуля.

Как видите, обратных вызовов ОЧЕНЬ МНОГО. Я хотел бы знать, что происходит с этим на этих звонках ...

Я не понимаю, что происходит с этой ссылкой, и как я могу ее сохранить :

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";
           }

Мой вопрос ... Что происходит с этой ссылкой? Почему оно меняется на окно ? Как я могу это исправить? Я знаю, что могу использовать call или apply , но функция pretendRender вызывается на AjaxInterface , а ссылка на Modules.Inbox был утерян (если я не использую вызывающего абонента , что я не могу использовать в "строгом" ). Я знаю, что могу передать это в AjaxInterface , чтобы сохранить его, но на самом деле я хочу по-настоящему понять, что происходит, и создать элегантное решение.

0
задан Óscar 16 November 2011 в 16:01
поделиться