只是一个简单的问题。在我目前的理解中,除了其中一个包含在函数中之外,以下两段代码是相同的。为什么方法一有效,方法二无效?有什么不同?
方法一:
// Reset button
$('.reset').button({
icons: {primary: 'ui-icon-closethick'}
}).click(function(){groupList.change()});
方法二:
// Reset button
$('.reset').button({
icons: {primary: 'ui-icon-closethick'}
}).click(groupList.change);
编辑: JSFiddle:http://jsfiddle.net/B8YEa/2/ - 请注意单击“两个”如何引发错误 Uncaught TypeError: Object #<HTMLButtonElement> has no method 'on'
和“一个”就好了,以及选择的实际变化
最佳答案
不同之处在于,第一段代码将函数作为对象的方法调用,而第二段代码将函数作为独立函数调用。
在第一种情况下,this
将引用函数内部的 groupList
对象,而在第二种情况下,this
将引用全局对象window
对象。
如果您调用一个函数并将其指定为对象成员,例如obj.method();
,它将作为一个方法被调用。如果您获得对该函数的引用并调用它,例如var m = obj.method; m();
,则该方法不再连接到对象。
另外,正如 Thilo 所指出的,第一段代码将在每次事件发生时查找方法,而第二段代码将在事件绑定(bind)时查找一次方法。
关于javascript - 为什么我不能通过只传递它的变量名来运行这个回调,但我可以将它包装在一个函数中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14455512/