【发布时间】:2011-08-16 22:02:32
【问题描述】:
考虑以下使用对象字面量定义的 jQuery 实现...
$(function() {
var myObject = {
methodOne: function()
{
$('#element').animate(
{'marginLeft': '50px'},
'slow',
function() {
myObject.methodTwo();
}
);
},
methodTwo: function()
{
$('#element').animate(
{'marginLeft': '-50px'},
'slow',
function() {
myObject.methodOne();
}
);
}
} // End myObject
myObject.methodOne(); // Execute
});
作为记录,上面的代码按预期工作。我不明白的是为什么像下面这样一个微妙且看似无害的变化......
methodOne: function()
{
$('#element').animate(
{'marginLeft': '50px'},
'slow',
myObject.methodTwo() // No more anonymous function
);
},
... 到 methodOne 和 methodTwo 会导致浏览器错误声明 too much recursion。我声明回调的方式有什么区别?另外,如果我带回匿名函数声明,但将对象引用修改为如下所示...
methodOne: function()
{
$('#element').animate(
{'marginLeft': '50px'},
'slow',
function() {
this.methodTwo(); // assuming 'this' refers to 'myObject'
}
);
},
...我通过methodOne 获得了一次很好的通过,并且在回调时我的浏览器因为找不到methodTwo 而崩溃。我的猜测是我在某个地方超出了范围,但我无法正确决定在哪里。非常感谢您的洞察力!
【问题讨论】:
标签: javascript jquery oop