我尝试在 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/