匿名函数标记触发器中的javascript对象

匿名函数标记触发器中的javascript对象,javascript,Javascript,我在匿名函数中创建了一个标记触发器函数,如下所示: (function(){ var getElement = { getElem: function(element , elemInterval){ if(document.getElementsByTagName('div')[0].onload){ element = document.getElementsByTagName('div')[0]; clearInterval(elem

我在匿名函数中创建了一个标记触发器函数,如下所示:

(function(){
  var getElement = {
    getElem: function(element , elemInterval){
      if(document.getElementsByTagName('div')[0].onload){
        element = document.getElementsByTagName('div')[0];
        clearInterval(elemInterval);
        element.innerHTML = ' content changed. ';
      }
    }
  }
  var element , elemInterval;
  elemInterval = setInterval(getElement.getElem(element , elemInterval) , 1000);
})();
它需要做的是每一秒钟调用一个函数,并检查第一个div是否已加载,然后将元素端口保存到“element”var并更改div的内容


这似乎不起作用,这里有什么问题?

您立即调用该函数,并将
未定义的
(其返回值)作为
setInterval
的第一个参数传递。了解闭包是如何工作的

elemInterval = setInterval(function() {
    getElement.getElem(element , elemInterval);
}, 1000);

您直接调用它并将结果值传递给
setInterval
,它是
未定义的

您可能需要将函数传递给
setInterval
,后者将调用
getElem

elemInterval = setInterval(function() {
                               getElement.getElem(element , elemInterval);
                           }, 1000);

问题很可能是作用域的问题——getElem函数包含在var中,var包含在函数块中(函数块也有自己的作用域)。间隔函数需要在全局范围内可访问

我现在无法测试这个,但iirc,这会起作用:

var something = (function(){
  var getElement = {
    getElem: function(element , elemInterval){
      if(document.getElementsByTagName('div')[0].onload){
        element = document.getElementsByTagName('div')[0];
        clearInterval(elemInterval);
        element.innerHTML = ' content changed. ';
      }
    }
  }
  var element , elemInterval;
  elemInterval = setInterval(something.getElement.getElem(element , elemInterval) , 1000);
  return getElement;
})();

但这是一种高层次的间接寻址,您可能希望避免将您的函数包含在另一个嵌套函数中。

我尝试过它,但它实际上什么也没做,下面是一个实例:我尝试过它,但它实际上什么也没做,下面是一个实例:@Mor Sela:这是因为您的
if
子句。为什么要检查
onload
?太棒了,伙计!我认为如果已加载,onload应该给我true,但我想我错了,谢谢大家。@Mor Sela:不,您正在检查元素是否具有
onload=“…”
属性,这在这里没有真正意义。为什么最终返回此对象?因为这就是分配给“var something”的内容,而没有返回,某些内容包含函数定义,而不是使用getElem方法的getElement对象。