ООП не понимаю...
Помогите разобраться.
script1 (function () { 'use strict'; function MotionVector(){ this.flag = true; this.computation = function(event){ console.log(this.flag); } } window.MotionVector = MotionVector; })(); script2 (function () { 'use strict'; var mov = new MotionVector(); function movMouse() { var element = document.getElementsByClassName('activate')[0]; element.addEventListener('mousemove', mov.computation, false); } window.addEventListener('load', movMouse, false); })(); Почему не выводиться console.log(this.flag), пишет "undefined", а мне нужно, что б 'true' |
Цитата:
http://learn.javascript.ru/this#вы...функции |
когда вытаскиваешь функцию из обьекта и засовываешь куда-то в другое место, то 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 |
как я по царски обьясняю а))
|
вышел из ситуации таким образом
script2 (function () { 'use strict'; var mov = new MotionVector(); function movMouse() { var element = document.getElementsByClassName('activate')[0]; // element.addEventListener('mousemove', mov.computation, false); element.addEventListener('mousemove', mouseGo, false); } function mouseGo(event){ mov.computation(event); } window.addEventListener('load', movMouse, false); })(); |
с bind() хороший вар-т
|
Цитата:
|
да понял. this - ссылка на вызыватель обработчиков. а не ссылка на оъект
спасибо |
Часовой пояс GMT +3, время: 14:49. |