簡體   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