![]() |
|
Модераторы: Sardar, Aliance |
![]()
|
|
| stup |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 17.4.2007 Репутация: нет Всего: 1 |
Добрый день!
У меня возник вопрос про работу ключевого слова this. Итак, 2 фрагмента кода:
И:
Вопрос: Почему в первом случае this ссылается на объект-функцию, а во втором на объект img ? |
||||
|
|||||
| szz |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1289 Регистрация: 31.5.2005 Где: Moscow, Jerusalem Репутация: нет Всего: 33 |
Потому что в первом случае ты вызываешь функцию, а во втором присваиваешь анонимно как метод объекта. А если он метод, то this - объект, методом которого является функция.
--------------------
|
|||
|
||||
| vasac |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 13 Всего: 36 |
Лучше сказать не вызывается, как метод объекта, а вызывается в контексте объекта.
В первом случае в контексте div, во втором в контексте img. Что означает "в первом случае this ссылается на объект-функцию" мне не понятно. Откуда у функции взялся innerHTML? |
|||
|
||||
| Mymik |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1474 Регистрация: 12.5.2006 Где: Lamer-центер Репутация: 11 Всего: 78 |
в первом случаи как метод window, а во втором случаи как метод объекта img
-------------------- |
|||
|
||||
| stup |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 17.4.2007 Репутация: нет Всего: 1 |
В том то и дело, что в контексте div этот метод не вызывается, содержимое дива не меняется. Не могли бы вы объяснить как именно работает this, в частности, куда именно он ссылается.
|
|||
|
||||
| Zeroglif |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Чтобы было понятно, измени код на:
Ты увидишь в алерте, что автоматом создаётся вспомогательная функция, телом которой является то, что написано в атрибуте дива. То есть, при первоначальном вызове ожидаемый тобой this будет передан именно в эту функцию, внутри которой можно с ним работать, но уже дальше функция onClickF вызывается сама по себе, у неё своё собственное значение this, никакой связи с предыдущим. Если сильно упростить ситуацию, то можно представить её так:
Это издержки данного старейшего способа регистрации события непосредственно в коде элемента, "нужный" this приходится руками передавать аргументом... |
||||
|
|||||
| vasac |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1060 Регистрация: 4.5.2006 Репутация: 13 Всего: 36 |
||||
|
||||
| stup |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 17.4.2007 Репутация: нет Всего: 1 |
Ага, т.е. this всегда ссылается на объект, вызвавший данную функцию-объект. Меня запутало то, что браузер заворачивает содержимое onClick в еще один объект, который и присваивает событию onClick. Но в таком случае мне непонятно, как работают конструкторы.
|
|||
|
||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
||||
|
||||
| stup |
|
||||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 17.4.2007 Репутация: нет Всего: 1 |
Я думал, что этот код добавляет к объекту myObject нужные свойства и устанавливает их значения. Далее же при создании
создается копия шаблона и присваивается экземпляру. Если же this ссылкается на объект, вызвавший данную функцию, то я перестаю что либо понимать. |
||||
|
|||||
| Zeroglif |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 644 Регистрация: 22.9.2005 Репутация: 28 Всего: 66 |
Не путай функцию, которая конструирует с функцией, которая не конструирует. Если слева оператор new, то конструктором создаётся новый объект и ссылка на этот объект становится значением this. |
|||
|
||||
| stup |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 56 Регистрация: 17.4.2007 Репутация: нет Всего: 1 |
Хе. Если есть оператор new, то объект как бы вызывает функцию-конструктор, и this в ней как раз и ссылается на наш объект, т.е. конструктор как раз и "собирает" экземпляр?
|
|||
|
||||
![]()
|
| Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | JavaScript: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |