匿名函数标记触发器中的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对象。