我有以下代码:
XService.start = function() {
  setInterval("XService.poll()", XService.pollInterval); }
这很好用。然而,当我这样做时(将函数作为引用传递,而不是让字符串eval d),它就停止工作了:
XService.start = function() {
  setInterval(XService.poll, XService.pollInterval); }
为什么?我做错了什么?在我的代码中没有其他的改变。我也在第二个版本中尝试了XService.poll(),但也没有成功。我读过的文档中说省略了()。
帮助?
编辑: XService.poll是一个函数;XService.pollInterval是一个数字。两者都被正确地声明和分配。
Edit2: XService代码:
XService = {};
XService.pollUrl = "/Poll";
XService.pollInterval = 60000;
XService.poll = function() {
  $.get(this.pollUrl, null, null, "text"); }
XService.start = function() {
  setInterval(XService.poll, XService.pollInterval); }
发布于 2009-09-18 20:35:49
在那个特定的时刻,XService.poll是一个‘函数’,'XService.pollInterval‘是一个数字吗?
编辑:由于您刚刚发布了代码..
setInterval(
    function() {
        XService.poll();
    }, XService.pollInterval
);发布于 2009-09-18 20:38:09
函数所绑定的内容会发生变化。
当你调用第一个函数时,你的'this‘语句被绑定到XService对象。当你调用第二个函数时,你的'this‘语句被绑定到window对象。
例如,假设我们有这样的XService和poll
function poll(){ alert(this); }如果是第一个示例,它将向XService对象发出警报,但在第二个示例中,它将向window对象发出警报。
除了mootools之外,我不知道它的语法,但是在mootoos中,你可以调用
setInterval(XService.poll.bind(XService), 100)并且它将正确调用该方法。
https://stackoverflow.com/questions/1446695
复制相似问题