Я получаю эту ошибку после попытки оптимизации кода, над которым я работаю.Тип ошибки 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» называется.
В этой строке есть ошибка? – ppoliani
Где задан geoArray? – GrandmasterB
Извините, я переименовал переменные, чтобы сделать вещи «яснее» - сбой. Я отредактировал вопрос – null