ООП не понимаю...
Помогите разобраться.
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, время: 06:41. |