尝试优化我正在处理的一些代码后,我收到此错误。
最初我使用的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 :(得分:2)
您用于迭代数组的方法不正确。 forEachObject
不是普通JavaScript数组的方法。这是fabric.Collection
上定义的方法。
错误只表示您尝试将未定义类型用作函数;您可以使用forEach
方法或使用常见的for
循环进行迭代。