Как правильно вызвать метод внешнего класса из анонимной функции

Я пытаюсь добавить прослушиватель событий к кнопкам, используя цикл for Внутри цикла я объявил анонимную функцию. базовый тест (алерт) работает Но когда я пытаюсь вызвать метод внешнего класса, это не сработает.

Класс работает вне этого цикла Предупреждение и весь код работают нормально (ошибки времени выполнения нет)

Что мне не хватает?

for (let i = 0; i < buttons.length; i++) {
    (function() {
        var j = i;
        buttons[j].addEventListener(
            'click',
            function() {
                alert('hello world ' + j);
                classname0.method(buttons[j].id);
            },
            false,
        );
    })();
}

Обратите внимание, что лучше использовать console.info для отладки вместо предупреждения

R3tep 18.12.2018 12:49

Можете ли вы поделиться кодом класса, о котором вы говорите?

Swapnil 18.12.2018 12:50
class - это зарезервированное имя в javascript (даже если оно не используется). Также доступен ли ваш class в области, в которой вы разрушаете цикл или вызываете функцию?
Nikos M. 18.12.2018 12:51

Я пытался анонимизировать настоящее имя класса, исправлю

Guy Louzon 18.12.2018 12:55

Итак, когда вы говорите «класс работает вне этого цикла», что он делает? а когда не работает, значит, что не работает.

Rahul R. 18.12.2018 12:55

метод просматривает дом и обновляет его. также работает без анонимной функции и внутри обещания внутри цикла ...

Guy Louzon 18.12.2018 12:56

Я не вижу причин для IIFE, это обычно делается для создания новой области в цикле for с асинхронным кодом или кодом обработки событий, но вам не нужно создавать область, потому что пусть заявление решает это (я больше поклонник использования для каждого вместо этого).

HMR 18.12.2018 13:03

Хорошо, как ты посоветуешь, что я тогда с этим справлюсь? какой правильный синтаксис?

Guy Louzon 18.12.2018 13:07

В вашем вопросе недостаточно информации, чтобы понять, что не так.

HMR 18.12.2018 13:11
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
9
42
2

Ответы 2

Вы пишете свою функцию таким образом

(function(){ ... }() )

вместо

(function(){ ... })()

это потому, что теперь он выполняется, а не раньше, это могут быть другие ошибки. Как сказал Никос М., класс - это зарезервированное ключевое слово. Дайте нам больше информации. Покажите, пожалуйста, ваше определение classname0.

Sylvan LE DEUNFF 18.12.2018 13:00

@SylvanLEDEUNFF О чем вы говорите, оба способа написания IIFE совершенно одинаковы.

HMR 18.12.2018 13:05

Возможно, я ошибаюсь, но я никогда не встречал этого ни в одной официальной документации, такой как developer.mozilla.org/fr/docs/Glossaire/IIFE

Sylvan LE DEUNFF 18.12.2018 13:09

Может быть, вам просто нужно «вызвать», чтобы получить правильное «это» в вашем классе.

classname0.method.call(classname0, buttons[j].id);

Другие вопросы по теме