В своем последнем блоге я писал о привязке «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 и/или отладчик всегда указывал мне правильный путь для решения проблемы.