Javascript 单击处理程序可以是对象吗?

Javascript 单击处理程序可以是对象吗?,javascript,events,click,google-plus-one,Javascript,Events,Click,Google Plus One,我试图在模块中注册+1次点击,该模块被包装为一个匿名函数 为此,我创建了一个全局对象MyModule,并通过它导出了click handler函数。问题是-我的单击处理程序没有被调用 。代码: //初始化+1按钮 gapi.plusone.go(); (功能(){ window.MyModule={}; 函数plusOneClicked(){ 警报(“+1!”); } window.MyModule.plusOneClicked=plusOneClicked; })() ... 当我将一个外部

我试图在模块中注册+1次点击,该模块被包装为一个匿名函数

为此,我创建了一个全局对象MyModule,并通过它导出了click handler函数。问题是-我的单击处理程序没有被调用

。代码:

//初始化+1按钮
gapi.plusone.go();
(功能(){
window.MyModule={};
函数plusOneClicked(){
警报(“+1!”);
}
window.MyModule.plusOneClicked=plusOneClicked;
})()
...
当我将一个外部函数作为回调函数(其唯一目的是将调用转发到window.MyModule.plusOneClicked)时,它可以工作:

function foo() {
  window.MyModule.plusOneClicked();
}
...
<g:plusone callback='foo'></g:plusone> 
函数foo(){
window.MyModule.plusOneClicked();
}
...

为什么单击处理程序会错过window.MyModule.plusOneClicked(),而找到foo()?

我相信,因为
回调
需要一个直接处理程序方法(如
foo()
),而不是引用(如
window.MyModule.plusOneClicked
)。因此,基本上,您不能简单地将这样的引用分配给click处理程序,而是编写一个(包装器)方法作为处理程序,并让它执行必要的调用。

Google可能正在编写

window[callback]();
在他们的代码中

这要求
回调
字符串引用的是
窗口
的属性,而不是另一个对象的属性

window[callback]();