Поясните пожалуйста, почему следующий код:
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.
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости