Глядя на ваш код, строка 141 вызывает проблему
console.log( "pincha dentro = ", contains());
Проблема заключается в том, что вы вызываете метод содержимого без передачи параметра объекта pal, что означает, что он автоматически передает значение undefined(посмотрите здесь )
function contains(pal) {
if((pal.posX <= mouse.x)&&
(pal.posX + pal.largoPalabra >= mouse.x)&&
(pal.posY <= mouse.y)&&
(pal.posY + pal.altoPalabra>= mouse.y))
{return true;}
else { return false;}
// if ((100 <= mouse.x)&&
// (100 + 150 >= mouse.x)&&
// (200 <= mouse.y)&&
// (200 + 40>= mouse.y)) // this works
}
Как только вы удалите эту строку, вы без ошибок.Надеюсь, это поможет