我想了解一些关于调用对象,但我错过了一些东西。下面我写了虚拟代码(这有效),所以我可以说明我的问题。 这是一些代码。在jQuery中调用对象作为回调,无法正常工作
HTML:
<button id="test">tst</button>
JS:
var testObj = {
text: function(){
console.log("is it working???");
}
}
//on button click
$('#test').click(function(){
console.log(testObj.text());
});
现在,有了这个,当我点击该按钮,它工作正常,并在控制台上显示 “是它的工作” 因为它应该至。
,当我做同样的事情,但请从对象调用括号的测试,只是把它当作
$('#test').click(function(){
console.log(testObj.text);
});
控制台期待它显示我作为一个对象。 Google Chrome中的控制台特别说明了"function testObj.text()"
。从本质上讲,它不会运行内部的代码,再次良好。
这是问题所在。
当我尝试调用testObj
对象作为回调方法时,它不起作用。
这里是我有:
$('#test').click(function(){
$(this).animate({"font-size": "20"}, 3000, "swing", testObj.text());
});
直接与上面这段代码,结束意外事件发生的是,虽然“是它的工作”拿出在控制台中使用时,它不等待然后启动回叫3秒钟,一旦按钮被点击,回调就会熄灭。本质上它错过了回调。
现在,当我使用相同的代码,但从对象调用删除括号,然后它的工作原理如下。动画播放完成后3秒钟后,回调会触发并在控制台上显示“正在工作”。
$('#test').click(function(){
$(this).animate({"font-size": "20"}, 3000, "swing", testObj.text);
});
上面看一路的第一例子,当我删除了括号,控制台显示它给我作为一个对象,并没有运行里面的代码,我不明白为什么现在的作品里面括号中的回调被删除。
我的问题是,为什么会发生这种情况? 我已经在谷歌上下了,但不知道我在寻找什么。
jquery animate函数方法为整个参数使用Function()类型。在使用animate的第一个示例中,您正在评估testObj.text()并将该值传递给动画(具有输出到控制台的副作用)。在第二个例子中,你实际上正在传递函数。 – russianmario