Показать сообщение отдельно
  #3 (permalink)  
Старый 02.12.2013, 13:39
Профессор
Посмотреть профиль Найти все сообщения от Maxmaxmaximus3
 
Регистрация: 18.11.2013
Сообщений: 275

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

element.addEventListener('mousemove', mov.computation.bind(mov), false);


bind переводится привязать =)


И кстати, такая фигня работает не только при обработчиках а при любом доставании функции из обьекта и кладении её в другое место. грубо говоря this ом в функции будет то что стояло слева от точки при вызове функции.

obj.qwqw.ww() // this == qwqw

var rr = {}
rr.ww = obj.qwqw.ww;
rr.ww() // this == rr

ww = obj.qwqw.ww;
ww() // this == window



еси там ни чо не стояло то this == window

Последний раз редактировалось Maxmaxmaximus3, 02.12.2013 в 13:46.
Ответить с цитированием