javascript - 使用对象引用调用 setinterval

标签 javascript object reference mootools setinterval

我有一个横幅旋转器,我想使用对象而不是函数,这样我可以使代码更有效率。无论如何,我似乎无法让 setInterval 工作。我认为这与对象引用有关。有人可以解释一下吗?到目前为止,这是我得到的:

window.addEvent('domready', function() {
function set_banner(divid, array)
{
    var banner = $(divid);
    banner.set('html', '<a href=""><img src="" alt=""/></a>');
    var banner_link = $(divid).getElement('a');
    var banner_image = $(divid).getElement('img');

    var delay = 0;  

    for (var keys in banner1array) {
        var callback = (function(key) { return function() {
            banner.setStyle('opacity', 0);
            var object = array[key];
            for (var property in object) {
                if (property == 'href') {
                    var href = object[property];
                }
                if (property == 'src') {
                    var src = object[property];
                }
            }
            if (!banner.getStyle('opacity')) {
                banner.set('tween', {duration:1000});                   
                banner_link.setProperty('href', href);
                banner_image.setProperty('src', src);
                banner.tween('opacity', 1);
            }
        }; })(keys);
        setTimeout(callback, delay);
        delay += 21000;
    }
}

var banner1 = set_banner('banner1', banner1array);
setInterval(function() {set_banner('banner1', banner1array);}, 84000);

var banner2 = set_banner('banner2', banner2array);
setInterval(function() {set_banner('banner2', banner2array);}, 84000);

});

最佳答案

几个简单的错误:

 var banner1 = new set_banner('banner1');
               ^ ---------- creates a new object and uses set_banner as the constructor
                            your code already gets called here
                            and you get a new object back, which in this case has NO use

 ....
 setInterval(banner1(), 42000);
                     ^----------------- The parenthesis EXECUTE the function
                                        the RETURN VALUE is then passed to setInterval
                                        BUT... banner1() is NOT a function, so this fails

如果你想调用 set_banner 你想做什么42 秒后传递参数是使用匿名函数,然后调用 set_banner .

setInterval(function() { // pass an anonymous function, this gets executed after 42 seconds...
    set_banner('banner1'); // ...and then calls set_banner from within itself
}, 42000);

关于javascript - 使用对象引用调用 setinterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4477586/

相关文章:

javascript - 转换js对象

javascript - 在javascript中如何动态获取对象的嵌套属性

java - 如果我在 Java 中覆盖 'equals' 方法,为什么需要覆盖 hashcode?

entity-framework - EF4 代码优先 : To Include or to not Include the Foreign Keys in the model when setting up an Association

javascript - 使用正则表达式匹配 8 或 9 位数字

javascript - 如何为这种类型的构造函数创建原型(prototype)?

javascript - 比较 if 语句中的两个时间值

scala - Scala中对象的Mockito

c++ - 通过 const ref 传递整数类型有什么好处

c++ - C++中的引用和析构函数