javascript - setInterval() 对象的方法调用

标签 javascript jquery

我尝试在 setInterval() 计时器内调用对象方法,但没有成功。 创建对象时该方法被调用一次。方法声明中的更改只会给我带来更新根本不是函数的错误。

这是函数可访问性的问题还是我犯了一般结构错误?

    window.viz = new VizOne("test.json");
    setInterval(viz.updateViz(), 5000);
    

    
//one object for each viz, each has a setup and an update method
    function VizOne(dataFile){
        var file = dataFile;
        var data = [];
        var s = Snap(500,100);
        
        var fullLength = 0;
        var allRects = [];
        
        $.getJSON(file, function( rawData ) {
            var i = 0;        
            $.each( rawData, function( key, val ) {
                data[i] = val;
                i++;
            })                
        }).done(function() {        
            for(i = 0; i<data.length;i++){
                allRects.push(s.rect(fullLength, 0, data[i],100)
                               .attr({fill: "#bada55", opacity: Math.random()})
                                   );
                                       
                console.log("x: "+ fullLength +", value: "+ data[i]);
                fullLength= fullLength+parseInt(data[i]);
            }
        });
           
        //method
        this.updateViz = function() {            
            $.getJSON(file, function( rawData ) {
                var i = 0;        
                $.each( rawData, function( key, val ) {
                    data[i] = val;
                    i++;
                })                
            }).done(function() {        
                console.log("update vizOne")
                for(i = 0; i<allRects.length; i++){
                    allRects[i].animate({opacity: Math.random()},3000);                                    
                    }

                   })                                                            
            }        
    };

最佳答案

setInterval 的第一个参数必须是一个函数

您正在调用 viz.updateViz() 并传递返回值(未定义)。

由于 updateViz 取决于在正确的上下文中调用(它在内部使用 this),因此您需要创建一个新函数来在正确的上下文中调用它。

setInterval(viz.updateViz.bind(viz), 5000);

关于javascript - setInterval() 对象的方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27659945/

相关文章:

javascript - 如何固定一个元素到div的右边?

javascript - 我可以更简单地解释如何使用plotly.js 来了解树形图中项目的数组层次结构吗?

javascript - 关闭 jQuery 中的对话框

javascript - 如何调用包装在 jQuery 函数中的 JavaScript 方法

javascript - 如何使信息仅在使用 jquery 和 css 悬停时出现?

javascript - Node JS/Gzip : Image file download ends prematurely with no error

javascript - React Native Flatlist 搜索没有从 firebase 用户集合中返回任何值

javascript - Canvas ID 裁剪为预定义大小

Jquery 停止声音云嵌入模式

javascript - 删除JS数组元素