繁体   English   中英

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内部使用this ),因此您需要创建一个新的函数来在正确的上下文中调用它。

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

在方法名称后使用()将立即调用该方法,并且该方法调用的返回值将作为参数传递给setInterval 摆脱() ,只传递函数引用。

setInterval(viz.updateViz(), 5000); 正在调用viz.updateViz()的结果,但是您想写setInterval(viz.updateViz, 5000);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM