В настоящее время я пишу плагин jQuery UI и исследую существующие источники jQuery UI.
В методе _create
плагина аккордеона this
присваивается self
(ссылка на источник), но затем оба this
и self
используются бок о бок в этом методе. Итак, почему они вообще решили назначить self
?
Все о контексте. В самой функции self
и this
относятся к одному и тому же объекту, но в обработчиках событий this
относится к элементу DOM, на которое нацелено событие. Назначая значение от this
до self
, он оставляет их свободными ссылаться либо на объект виджета, либо на элемент DOM внутри этих обработчиков событий.
Если вы посмотрите внимательно, вы заметите, что в контексте функции они используют self
исключительно и в то время как в анонимных функциях (обработчиках событий) они используют как this
, так и self
для ссылки на элемент DOM или к Виджету соответственно.
Я точно не знаю, как работают плагины JQuery UI, но я мог представить себе следующий сценарий. Я думаю, что они хотели сохранить ссылку на объект Widget без перезаписывания this
(изменение области). Когда функция выполняется, область действия больше не является объектом Widget, а элементом DOM. Поэтому они могут легко добавлять классы и все, используя this
в качестве ссылки. До этого они восстанавливают область видимости widget objcet с помощью закрытия и присваивают значение this
(теперь все еще являющийся объектом виджета, когда код интерпретируется) локальной переменной self
. Теперь, используя self, они могут изменять поля объекта.