0

我試圖優化我正在處理的一些代碼後收到此錯誤。類型錯誤undefined不是函數 - 織物JS

起初,我用canvas.forEachObject(function(obj){})這是工作正常,但我需要在一定程度上簡化程序。

我現在有一個功能,通過畫布迭代,並添加了所有相關的對象類型的數組,我會再使用。

function getObjects(){ 

    var canvasObjects = canvas.getObjects(); 
    var theArray = new Array(); 

    for(obj in canvasObjects){ 
     if(canvasObjects[obj].get('type') == 'thisType'){ 
      theArray.push(canvasObjects[obj]); 
     } 

     if(canvasObjects[obj].get('type') == 'group'){ 
      var groupObjects = canvasObjects[obj].getObjects(); 
      for(groupObj in groupObjects){ 
       if(groupObjects[groupObj].get('type') == 'thisType'){ 
        theArray.push(groupObjects[groupObj]); 
       } 
      } 
     } 
    } 
    return theArray; 
} 

我然後調用中使用的陣列,以確定是否發生了碰撞的動畫循環的功能。

陣在這裏創建:

var geoArray = getObjects(); 

function detectCollision(target) { 

    target.setCoords(); 

    geoArray.forEachObject(function(obj) 
    //for(obj in geoArray) //1st attempt - same result 
    { 
     obj.setCoords(); 
     if(obj!=target && target.intersectsWithObject(obj)){ 
      //..do stuff 
     } 
    }); 
} 

數組是建立了良好的,幷包含對象的正確數目,所以我敢肯定,有就是有沒有問題。當我運行碰撞函數併發生類型錯誤問題時,會發生此問題。搜索表明我可能不會返回對象類型,但我不確定是否是這種情況,如果是這樣,我不知道如何解決它。

非常感謝您的幫助。

編輯:確切的錯誤是:

[Error] TypeError: 'undefined' is not a function (evaluating 'geoArray.forEachObject') 

編輯,碰撞環路內總是出現錯誤,並儘快「OBJ」之稱。

+0

哪條線有錯誤? – ppoliani

+0

geoArray分配在哪裏? – GrandmasterB

+0

對不起,我將變量重命名爲「更清晰」 - 失敗。我已經編輯了問題 – null

回答

2

你使用通過數組進行迭代的方法是不正確的。 forEachObject不是普通JavaScript Array的一種方法。它是在fabric.Collection上定義的方法。

的錯誤只是表明你試圖使用一個未定義的類型的函數;您可以迭代使用forEach方法或使用常見的for循環。

+0

感謝您先前的幫助和發佈解決方案,非常感謝您和@GrandmasterB。 – null

相關問題