當我通過「這個」到一個匿名函數,像這樣:數據如何傳遞給JavaScript中的匿名函數?
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
這裏發生了什麼?將變量傳遞給匿名函數的正確方法是什麼?
對不起,這個令人困惑和冗長的帖子。
很酷!非常感謝!嗯,我想我對js的工作起到了很大的舒適作用。這有點像LUA。這只是我一直在想「Java」,這並不適用。 – 0scar 2009-05-27 12:26:03