3

只是一个简单的问题。在我目前的理解中,以下两个代码块是相同的,除了一个包含在一个函数中。为什么它适用于方法 1,而不适用于方法 2?有什么区别?

方法一:

// 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',“一个”很好,以及选择的实际更改

4

2 回答 2

4

不同之处在于,第一个代码将函数作为对象的方法调用,而第二个代码将函数作为独立函数调用。

在第一种情况下,this将引用groupList函数内部的对象,而在第二种情况下,this将引用全局window对象。

如果你调用一个指定它为对象成员的函数,例如obj.method();,它将被调用为一个方法。如果您获得对该函数的引用并调用它,例如var m = obj.method; m();,则该方法不再连接到该对象。


此外,正如 Thilo 所指出的,第一个代码将在每次事件发生时查找方法,而第二个代码将在事件绑定时查找一次方法。

于 2013-01-22T09:45:47.177 回答
1

如果groupList.change尚不存在,但稍后定义(但在用户单击之前),则存在差异。如果稍后重新定义,则相同。

第一个代码groupList.change在点击发生时解析。

第二个代码groupList.change立即解析。

于 2013-01-22T09:45:44.840 回答