Контекст смешивается в $.deferred.promise
У меня есть следующий код;
function myFunction(promiseObject){
var that = this;
promiseObject
.done(function(){
//using that here
});
}
Вышеуказанная функция вызывается в нескольких контекстах и, следовательно, значение для this
изменения в каждом звонке. Проблема, с которой я сталкиваюсь, заключается в том, что для многих одновременных вызовов that
переопределяется другим контекстом, который также находится в процессе завершения.
Я хотел понять, что может быть причиной этого. Также хотел понять, что является концепцией за рамки that
переменная, определенная в myFunction
но используется в прикрепленном методе обратного вызова.
Заранее спасибо:)
-devsri
1 ответ
Я надеюсь, что я правильно понимаю вашу проблему. Концепция позади that
переменная определяется в myFunction
и быть доступным в обратном вызове - это лексическая область видимости на работе. Он создает замыкание (в основном, ссылку на среду выполнения функции, в которой определен обратный вызов) для доступа к обратному вызову.
Значение this
Внутри myFunction
будет зависеть от того, как вы звоните myFunction
,
Если вы хотите myFunction
чтобы иметь конкретный контекст, вам нужно вызвать его с таким контекстом, например, так:
var myContext = { foo: "bar" };
myFunction.call(myContext);
Значение this
внутри myFunction теперь будет равен myContext
,
Если вы хотите, чтобы ваша ценность that
чтобы оставаться согласованным между вызовами, вам необходимо убедиться, что вы звоните / применяете myFunction
с правильным контекстом везде.
В качестве альтернативы вы можете использовать такую функцию, как underscore.js _.bind
:
myFunction = _.bind(myFunction, myContext);
myFunction
теперь всегда будет привязан к определенному контексту.