Top.Mail.Ru
Ответы

Ошибка в JS коде. Объект не удаляется, как следует. Ошибка: index.html:1 Uncaught TypeError: Illegal invocation

Я новичок в JS, если плохой код, поправьте меня, пожалуйста. И объясните, пожалуйста, причину такой странной ошибки.

Дополнен

Проблемная область. В demo.js
BulletFlight(Position) {//L - Left; R - Right; U - Up; D - Down. Сторона полёта пули, чтобы не делать разные методы
var Blt = document.getElementById('Bullet');//Сама пуля
var BltStyle = window.getComputedStyle(Blt);//Стиль для пули

var Left = parseInt(BltStyle.marginLeft);//Положение относительно лева
var Top = parseInt(BltStyle.marginTop);//Положение относительно верхней части
//Пока проверка идёт на 1 сторону, позже добавлю на другие части "света" :)
switch(Position){
case 'L':
Blt.style.marginLeft = Left - this.Distance + "px";
break;
case 'R':
Blt.style.marginLeft = Left + this.Distance + "px";
Blt.style.transform = "rotate(90deg)";
//Объект не удаляется, как следует. Ошибка: index.html:1 Uncaught TypeError: Illegal invocation
setTimeout(Blt.parentNode.removeChild, 3000);

break;
case 'U':
Blt.style.marginTop = Top - this.Distance + "px";
break;
case 'D':
Blt.style.marginTop = Top + this.Distance + "px";
break;
}
}

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок
5лет

Ты пытаешься вызывать метод объекта по референсу, вне контекста объекта.
И именно это ломает скрипт.
Но даже если исправить это - будет ломаться от того что метод вызывается без обязательного аргумента.
Выражение должно быть вида setTimeout(() => Blt.parentNode.removeChild(child), 3000); или setTimeout(function () { Blt.parentNode.removeChild(child); }, 3000); в старом синтаксисе.
‎‎
p.s.: В этом коде далеко не одна проблема, и не две - это критичных ошибки всего две. А маленьких некритичных косячков уйма, да и кодстайл опять же... Хорошо бы бы изучить сначала HTML, затем JS, и только затем переписать этот код (полностью, с чистого листа).
p.p.s.: Похвально что используешь имитацию enum для читаемости, это признак мышления программера.