0

Я получаю эту ошибку после попытки оптимизации кода, над которым я работаю.Тип ошибки undefined не функция - Fabric 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 
     } 
    }); 
} 

Массив построен хорошо и содержит правильное количество объектов, поэтому я уверен, что нет никакой проблемы. Проблема возникает, когда я запускаю функцию столкновения и возникает ошибка типа. Поиск указывает, что я не могу возвращать тип объекта, но я не уверен, что это так, и если да, то я не уверен, как его исправить.

Большое спасибо за помощь.

Edit: точная ошибка:

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

Edit, ошибка происходит всегда внутри цикла столкновений, и как только «OBJ» называется.

+0

В этой строке есть ошибка? – ppoliani

+0

Где задан geoArray? – GrandmasterB

+0

Извините, я переименовал переменные, чтобы сделать вещи «яснее» - сбой. Я отредактировал вопрос – null

ответ

2

Метод, который вы используете для итерации по массиву, неверен. forEachObject не является методом простого JavaScript-массива. Это метод, определенный на fabric.Collection.

Ошибка просто указывает на то, что вы пытаетесь использовать неопределенный тип в качестве функции; Вы можете либо итерации, используя метод forEach, либо используя общий цикл for.

+0

благодарит за вашу раннюю помощь и за размещение решения, большую благодарность как вам, так и @GrandmasterB. – null

Смежные вопросы