Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 02.12.2013, 13:25
Интересующийся
Отправить личное сообщение для ShuggyBumblebee Посмотреть профиль Найти все сообщения от ShuggyBumblebee
 
Регистрация: 24.11.2013
Сообщений: 20

ООП не понимаю...
Помогите разобраться.

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'
Ответить с цитированием
  #2 (permalink)  
Старый 02.12.2013, 13:35
Аватар для ksa
ksa ksa вне форума
CacheVar
Отправить личное сообщение для ksa Посмотреть профиль Найти все сообщения от ksa
 
Регистрация: 19.08.2010
Сообщений: 14,202

Сообщение от ShuggyBumblebee
Почему не выводиться console.log(this.flag), пишет "undefined", а мне нужно, что б 'true'
Дык!
http://learn.javascript.ru/this#вы...функции
Ответить с цитированием
  #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.
Ответить с цитированием
  #4 (permalink)  
Старый 02.12.2013, 13:47
Профессор
Посмотреть профиль Найти все сообщения от Maxmaxmaximus3
 
Регистрация: 18.11.2013
Сообщений: 275

как я по царски обьясняю а))
Ответить с цитированием
  #5 (permalink)  
Старый 02.12.2013, 14:02
Интересующийся
Отправить личное сообщение для ShuggyBumblebee Посмотреть профиль Найти все сообщения от ShuggyBumblebee
 
Регистрация: 24.11.2013
Сообщений: 20

вышел из ситуации таким образом
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);
})();
Ответить с цитированием
  #6 (permalink)  
Старый 02.12.2013, 14:04
Интересующийся
Отправить личное сообщение для ShuggyBumblebee Посмотреть профиль Найти все сообщения от ShuggyBumblebee
 
Регистрация: 24.11.2013
Сообщений: 20

с bind() хороший вар-т
Ответить с цитированием
  #7 (permalink)  
Старый 02.12.2013, 14:30
Профессор
Посмотреть профиль Найти все сообщения от Maxmaxmaximus3
 
Регистрация: 18.11.2013
Сообщений: 275

Сообщение от ShuggyBumblebee
с bind() хороший вар-т
тут не бинд надо понять а как работает ооп, ты понял? я тебе целую статью расписал
Ответить с цитированием
  #8 (permalink)  
Старый 02.12.2013, 15:22
Интересующийся
Отправить личное сообщение для ShuggyBumblebee Посмотреть профиль Найти все сообщения от ShuggyBumblebee
 
Регистрация: 24.11.2013
Сообщений: 20

да понял. this - ссылка на вызыватель обработчиков. а не ссылка на оъект
спасибо
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
небольшой вопрос по ООП cyber Events/DOM/Window 11 09.08.2013 14:50
Книжко по ООП krasovsky Учебные материалы 2 03.04.2013 12:50
ООП в javascript iostream21 Общие вопросы Javascript 11 12.07.2012 00:16
Есть ли смысл использовать ООП. Duda.Ml1986@gmail.com Оффтопик 18 18.02.2012 21:47
ООП PHP вопрос mycoding Серверные языки и технологии 9 03.06.2010 02:57