Когда я передаю 'this' анонимной функции, например:
MyClass.prototype.trigger = function(){
window.setTimeout(function(){this.onTimeout();},1000);
}
Я получаю ошибку "this.onTimeout не является функцией". Я предполагаю, что «this» больше не доступно во время выполнения анонимной функции? Итак, я делаю это:
MyClass.prototype.trigger = function(){
var me = this
window.setTimeout(function(){me.onTimeout();},1000);
}
Это действительно, как вы должны делать вещи? Это вроде работает, но кажется странным.
Тогда у нас есть этот пример:
$(function(){
function MyClass(){
this.queue = new Array();
}
MyClass.prototype.gotAnswer = function(count){
$('body').append("count:"+count+"<br/>");
}
MyClass.prototype.loadAll = function(){
var count = 0;
var item;
while(item = this.queue.pop()){
count++;
var me = this;
$.getJSON("answer.html",{},function(data){me.gotAnswer(count);});
}
}
var o = new MyClass();
o.queue.push(1);
o.queue.push(2);
o.loadAll();
});
Это выводит:
2
2
Не должен ли он выводить:
1
2
вместо этого? Затем я обнаружил, что помещение оператора $ .getJSON в другую функцию заставляет все это работать:
MyClass.prototype.loadAll = function(){
var count = 0;
var item;
while(item = this.queue.pop()){
count++;
this.newRequest(count);
}
}
MyClass.prototype.newRequest = function(count){
var me = this;
$.getJSON("answer.html",null,function(data){ me.gotAnswer(count); });
}
Это выводит:
1
2
(Или наоборот.) Что здесь происходит? Как правильно передать переменные в анонимную функцию?
Извините за запутанный и длинный пост.