|
|
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
Приветствую всех! Есть класс, управляющий движением элемента по экрану, в нем метод start(): Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Проблема в следующем: функциям-обработчикам нужно дать имена, чтобы в дальнейшем можно было сослаться на них для удаления EventListener. Пробовал делать их методами класса: Код: javascript 1. 2. 3. 4. 5. или даже глобальными: Код: javascript 1. 2. 3. 4. 5. - не работает. Только если код функции встраивается inline, тогда все ок. Как победить проблему? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 17:40 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
deGeneral, странно, покажите код того, как пробовали ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 18:16 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
Обработчик глобален: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Обработчик является методом класса: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Вот так, если схематически, пробовал. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 18:24 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
deGeneral, у меня работает, Google Chrome версия 78.0.3904.108: Код: html 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 19:11 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
Да, действительно. Проблема, наверное, где-то внутри обработчика, буду искать! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 21:21 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
Вот она, проблемка! Оказывается, при одном и при другом варианте наш this - совершенно разные вещи! В случае, если обработчик безымянный inline this смотрит на сам класс MoveController и тогда его поля обрабатывает нормально и корректно, а если обработчик отдельный метод, то this почему-то смотрит на... document. Интересны причины такого поведения, ведь точка вызова-то по сути та же самая, а this определяется в момент вызова. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 21:49 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
deGeneral Вот она, проблемка! Оказывается, при одном и при другом варианте наш this - совершенно разные вещи вот это вы открыли Америку :) потеря this ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 22:30 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух deGeneral Вот она, проблемка! Оказывается, при одном и при другом варианте наш this - совершенно разные вещи вот это вы открыли Америку :) потеря this Для себя - да, я в JS новичок. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 22:32 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
Вот, значит, если вкратце, как моя проблема обозначилась: Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. Как объяснить, почему так происходит? Как сделать так, чтобы из поименованной функции виделся x? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 22:34 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
У стрелочных функций нет «this»: https://learn.javascript.ru/object-methods#u-strelochnyh-funktsiy-net-this ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 22:38 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
Дмитрий Мух У стрелочных функций нет «this»: https://learn.javascript.ru/object-methods#u-strelochnyh-funktsiy-net-this Но как раз таки из нее почему-то this.x виден! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 22:44 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
Понял, дошло. Значит, из стрелочной функции this берется от метода start(), т.е. сам объект, и тогда получается, что поля объекта прекрасно видны. Если функция с именем, то ее this не берется от внешнего контекста, а т.к. есть document, то вот он в итоге и получается. С этим я, кажется, разобрался. Но теперь, что с этой всей радостью делать? Мне нужен именованный обработчик, и из него я должен видеть поля объекта. А именованный обработчик нужен, чтобы написать метод stop(), который корректно и эротично его уберет, когда понадобится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 22:50 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
deGeneral Дмитрий Мух У стрелочных функций нет «this»: https://learn.javascript.ru/object-methods#u-strelochnyh-funktsiy-net-this Но как раз таки из нее почему-то this.x виден! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 22:51 |
|
||
|
JS: именованный обработчик события в методе класса
|
|||
|---|---|---|---|
|
#18+
deGeneral Но теперь, что с этой всей радостью делать? Мне нужен именованный обработчик, и из него я должен видеть поля объекта. А именованный обработчик нужен, чтобы написать метод stop(), который корректно и эротично его уберет, когда понадобится. Код: javascript 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.11.2019, 23:04 |
|
||
|
|

start [/forum/topic.php?fid=22&fpage=13&tid=1443607]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
42ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
2ms |
| others: | 12ms |
| total: | 154ms |

| 0 / 0 |
