AnthonyWJones дал отличный ответ, но есть еще один похожий, который немного легче писать и читать. Вы просто сохраняете значение this в локальной переменной., Например.
var storedThis = this;
setTimeout(function() { $selector.val(storedThis.savVal); }, 1);
When you need to preserve the current this
item when calling setTimeout use this structure:-
setTimeout((function(self) {
return function() { $selector.val(self.savVal) };
})(this), 1);
This creates a closure from the outer functions execution context. The outer function returns an inner function that will have access the self
parameter. Its the inner function that gets called when the timeout occurs yet the value of self
will hold on to the original this
value.
Вы, вероятно, могли бы сделать что-то подобное, если бы переменные, которые вы пытаетесь использовать, определены на каждом шаге цикла.
var myObj = {
$selector: myConfigObj.$myCachedSelector
}
$.each([ myObj, mySecondObj, myThirdObj ], function(n, $selector) {
setTimeout(function() {
$selector.val(saveVal);
}, 1);
});
спасибо за ответы
Сейчас я использую функцию внутри setTimeout. Но я обнаружил, что настоящая проблема заключается в другом: в каждой функции я пытаюсь получить доступ к свойствам объекта, которые указывают на свойства в объекте конфигурации, но результат (например, для this. $ Selector) - «undefined»
var myObj = {
$selector: myConfigObj.$myCachedSelector
}
$.each([ myObj, mySecondObj, myThirdObj ], function() {
//code
});
Не уверен, в чем проблема. Оба объекта находятся в одной функции / области действия.