В своем последнем блоге я писал о привязке «this» к «EventListener».
У меня была похожая проблема с определением «this» в «forEach()».
Код ниже должен принимать массив имен (в смешанном регистре) и возвращать нормализованные имена (например, [ «anDReW», «DAVE» ] в [ «Andrew», «Dave» ] ).
Однако сообщение об ошибке показывает, что «это» — это «undefined» (в строке 13), а не объект экземпляра класса normalizedName. Это почему?
Я добавил «отладчик» в строку 13, чтобы увидеть, кто/что такое «это», и локальный область показывает «это» как «не определено». Что ж, в этом есть смысл, поскольку именно «nameArray.forEach» вызывает функцию обратного вызова в «forEach», а не экземпляр объекта.
Итак, как мы можем это исправить? Есть два способа решить эту проблему:
(1). Если я перенесу "отладчик" в строку 12 (за пределами "forEach"), а в локальной области видимости "this" теперь является экземпляром объекта класса normalizeName. Итак, мы можем привязать цикл «this» к циклу «forEach».
В строке 14 привяжите «this» (экземпляр объекта класса normalizeName) к «forEach».
(2). Используйте функцию стрелки в цикле forEach:
*** И «да», мы могли бы использовать «map» вместо «forEach»:
Я знаю, что понятие «это» может быть трудным для понимания. Для меня выяснить, кто/что «это» использует console.log и/или отладчик всегда указывал мне правильный путь для решения проблемы.