Поясните пожалуйста, почему следующий код:
Element.prototype.addClass = function() {
const args = Array.prototype.slice.call(arguments);
return Element.prototype.classList.add.apply(this, args);
};
document.body.addClass('first', 'two');
https://jsfiddle.net/0s5gptfb/
вызывает ошибку Uncaught TypeError: Illegal invocation
?
Что-то с контекстом?
Что происходит?
Метод Element.prototype.classList.add
принадлежит интерфейсу DomTokenList
, и должен вызываться в контексте DomTokenList
(в вашем случае Element.classList
).
Внутри метода Element.prototype.addClass
переменная this
указывает на экземпляр Element
, иными словами, вы пытаетесь вызвать метод add
в контексте неправильного объекта.
Что делать?
Нужно передавать правильный контекст методу Element.prototype.classList.add
. Например так:
Element.prototype.addClass = function() {
const args = Array.prototype.slice.call(arguments);
return this.classList.add.apply(this.classList, args);
};
document.body.addClass('first', 'two');
А вот и рабочий пример на JSFiddle.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
После изучения основ (HTML,CSS,SASS,Bootstrap,JS,jQuery) я столкнулся с проблемой - а что дальше-то? В мире Фронтэнда существует очень много фреймворков и библиотек,...