点击处理程序可以作为对象吗?

时间:2011-10-09 14:03:44

标签: javascript events click google-plus-one

我正在尝试在我的模块中注册+1次点击,这是一个匿名函数。

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

Live demo。代码:

// Initialize +1 button
gapi.plusone.go();


(function(){
  window.MyModule = {};

  function plusOneClicked() {
    alert("+1!");
  }

  window.MyModule.plusOneClicked = plusOneClicked;
})()

...

<g:plusone callback='window.MyModule.plusOneClicked'></g:plusone>

当我作为回调给出一个外部函数,其唯一目的是将调用转发给window.MyModule.plusOneClicked,它可以工作:

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

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

2 个答案:

答案 0 :(得分:1)

谷歌可能正在撰写

window[callback]();

在他们的代码中。

这要求callback字符串引用window的属性,而不是另一个对象的属性。

答案 1 :(得分:0)

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