Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   привязка Onklick к объекту (https://javascript.ru/forum/misc/47070-privyazka-onklick-k-obektu.html)

ShuggyBumblebee 07.05.2014 15:37

привязка Onklick к объекту
 
Добрый день.
есть обьект, в нем метод:
init: function(){
	this.Button();
	//this.btn.addEventListener('click', this.Button.bind(this), false);	
	this.btn.addEventListener('click', function(){return this.Button.call(this)}, false);		
}

В общем через this.btn.addEventListener('click', this.Button.bind(this), false); он работает, а вот через call() я не могу сообразить как сделать

пишет
Цитата:

Uncaught TypeError: Cannot read property 'call' of undefined

Sweet 07.05.2014 15:57

this в обработчике ссылается на элемент, на который повесили событие, т.е. на this.btn. Чем не устраивает вариант с .bind? А то, что ты пытаешься сделать с .call - совершенно другое. И
this.Button.call(this)

тоже самое (совершенно один в один), что и
this.Button()

ShuggyBumblebee 07.05.2014 15:59

В Опере Мини bind не работает

ShuggyBumblebee 07.05.2014 16:01

все есть
init: function(){
	var fn = this;
	this.Button();
//	this.btn.addEventListener('click', this.Button.bind(this), false);	
	this.btn.addEventListener('click', function(){return fn.Button.call(fn);
}, false);		
		}


даже можно и так fn.Button(), вместо call

M-ka 07.05.2014 16:54

ShuggyBumblebee,
более общепринято использовать that для передачи this, а fn использовать для колбеков или литералов...

Sweet 07.05.2014 17:31

Цитата:

Сообщение от ShuggyBumblebee
даже можно и так fn.Button(), вместо call

Не можно, а нужно! Потому что запись вида
object.method.call(object)

избыточна. this и так будет ссылаться на object.

ShuggyBumblebee 07.05.2014 17:33

Цитата:

Сообщение от Sweet (Сообщение 310763)
Не можно, а нужно! Потому что запись вида
object.method.call(object)

избыточна. this и так будет ссылаться на object.

Да. Я так и сделал:)


Часовой пояс GMT +3, время: 06:10.