类型错误undefined不是函数 - Fabric JS

时间:2014-02-12 19:30:04

标签: javascript undefined collision-detection typeerror fabricjs

尝试优化我正在处理的一些代码后,我收到此错误。

最初我使用的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'就会出现错误。

1 个答案:

答案 0 :(得分:2)

您用于迭代数组的方法不正确。 forEachObject不是普通JavaScript数组的方法。这是fabric.Collection上定义的方法。

错误只表示您尝试将未定义类型用作函数;您可以使用forEach方法或使用常见的for循环进行迭代。