当我通过“这个”到一个匿名函数,像这样:数据如何传递给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