JavaScript SetInterval-传递函数指针而不是字符串

JavaScript SetInterval-传递函数指针而不是字符串,javascript,Javascript,我有以下代码: XService.start = function() { setInterval("XService.poll()", XService.pollInterval); } XService.start = function() { setInterval(XService.poll, XService.pollInterval); } XService = {}; XService.pollUrl = "/Poll"; XService.pollInterval

我有以下代码:

XService.start = function() {
  setInterval("XService.poll()", XService.pollInterval); }
XService.start = function() {
  setInterval(XService.poll, XService.pollInterval); }
XService = {};
XService.pollUrl = "/Poll";
XService.pollInterval = 60000;
XService.poll = function() {
  $.get(this.pollUrl, null, null, "text"); }
XService.start = function() {
  setInterval(XService.poll, XService.pollInterval); }

这很有效。但是,当我这样做时(将函数作为引用传递,而不是让字符串eval'd),它会停止工作:

XService.start = function() {
  setInterval("XService.poll()", XService.pollInterval); }
XService.start = function() {
  setInterval(XService.poll, XService.pollInterval); }
XService = {};
XService.pollUrl = "/Poll";
XService.pollInterval = 60000;
XService.poll = function() {
  $.get(this.pollUrl, null, null, "text"); }
XService.start = function() {
  setInterval(XService.poll, XService.pollInterval); }

为什么??我做错了什么?我的代码中没有其他更改。我还在第二个版本中尝试了XService.poll(),但也没有骰子。我读过的文档中说省略()项

帮忙

编辑:XService.poll是一个函数;XService.pollInterval是一个数字。两者都已正确声明和分配

Edit2:XService代码:

XService.start = function() {
  setInterval("XService.poll()", XService.pollInterval); }
XService.start = function() {
  setInterval(XService.poll, XService.pollInterval); }
XService = {};
XService.pollUrl = "/Poll";
XService.pollInterval = 60000;
XService.poll = function() {
  $.get(this.pollUrl, null, null, "text"); }
XService.start = function() {
  setInterval(XService.poll, XService.pollInterval); }

XService.poll是“函数”还是“XService.pollInterval”是那个特定时间的数字

编辑:因为你刚刚发布了代码

setInterval(

    function() {
        XService.poll();
    }, XService.pollInterval

);

函数绑定的内容会发生变化

当调用第一个时,您的“this”语句绑定到XService对象。 调用第二个时,“this”语句将绑定到窗口对象

例如,假设我们有这样一个带有poll的XService

function poll(){ alert(this); }
如果是第一个示例,它将向XService对象发出警报,但在第二个示例中,它将向window对象发出警报

除了在mootools中,我不知道语法,但在mootoos中,您可以调用

setInterval(XService.poll.bind(XService), 100)

它会正确调用该方法

我们能看到XService的全部代码吗?这可能与它的定义方式、实时/运行时行为以及eval的不同执行方式有关!按照CMS所说的做将会起作用,并且会修复绑定问题(使用匿名函数)