setInterval() 对象的方法调用
setInterval() object's method call
我尝试在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);
在方法名后使用 ()
将立即调用该方法,并且方法调用的返回值将作为参数传递给 setInterval
。摆脱()
,只传递函数引用。
setInterval(viz.updateViz(), 5000);
调用viz.updateViz()
的结果,但你想写setInterval(viz.updateViz, 5000);
相关文章:
- 如何在webView,Android中从@JavascriptInterface方法调用Javascript
- javascript从子方法调用父方法
- 我应该返回一个类似console.log()的方法调用吗
- NodeJS-从同一文件中的另一个方法调用一个方法
- 使用restangular save方法调用put与post时的控件
- 从实例方法调用实例方法
- Node.js-异步方法调用问题
- Jquery事件绑定获胜'当作为方法调用时不起作用,但当直接在控制台中调用时会起作用
- 向模板实例变量传递调用方法调用的结果时出现异常
- jQuery 方法调用了两次
- 不能从 Backbone.View 的方法调用 Backbone.collection 的方法,其中包含 require
- 组合 onLayout 的方法调用
- lodash/下划线 - 使用绑定与方法调用和方法保持未绑定
- 从公共方法调用模块的私有函数
- 如何对 jqGrid 的 loadComplete 和 onSelectRow 进行基因预和后方法调用
- 完全限定的 JavaScript 方法调用
- 为什么我在 Angular JS 中收到两个方法调用
- 如何在从排序方法调用参数时将其传递给回调
- 使用两种不同的方法调用方法
- 如何在 javascript 中更改方法调用的全局范围