只是一个简单的问题。在我目前的理解中,以下两个代码块是相同的,除了一个被包含在函数中。为什么它适用于方法1,而不适用于方法2?有什么不同?
方法1:
// Reset button
$('.reset').button({
icons: {primary: 'ui-icon-closethick'}
}).click(function(){groupList.change()});
方法2:
// 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'
和“一个”就好了,以及实际更改选择
答案 0 :(得分:4)
不同之处在于第一个代码将函数作为对象的方法调用,而第二个代码将函数作为独立函数调用。
在第一种情况下,this
将引用函数内的groupList
对象,而在第二种情况下,this
将引用全局window
对象。
如果您调用一个函数将其指定为对象成员,例如obj.method();
,它将被称为方法。如果您获得该函数的引用并调用它,例如var m = obj.method; m();
,然后该方法不再与该对象相关联。
此外,正如Thilo所指出的,第一个代码将在每次事件发生时查找方法,而第二个代码将在事件绑定时查找方法一次。
答案 1 :(得分:1)
如果groupList.change
尚不存在,但稍后定义(但在用户点击之前),则存在差异。如果稍后重新定义,则相同。
当点击发生时,第一个代码会解析groupList.change
。
第二个代码立即解析groupList.change
。