Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   ошибка this.myfunction is not a function внутри события (https://javascript.ru/forum/misc/63253-oshibka-myfunction-not-function-vnutri-sobytiya.html)

Flakky 26.05.2016 17:47

ошибка this.myfunction is not a function внутри события
 
Приветствую всех. Суть следующая:

Есть класс объявленный через function(){}, внутри него через this. объявлены функции. В одной из функции я бинжу событие на элемент и вызываю другую функцию при срабатывании. Причем функцию вызываю из этого-же класса через this.myfunction().

Проблема в том, что при срабатывании события, браузер печатает ошибку, что функция не является функцией. При этом если просто вызвать функцию, то все работает..

Код примерно такой:

function MyClass(){

	this.elem = document.getElementById('someelem');
	this.myvar;

	this.myfunc1 = function(){
		this.myfunc2(); // Работает
	
		this.elem.addEventListener("mousedown", function(event){
			this.myfunc2(); // Не работает. Выдает ошибку "is not a function"
			this.myvar = 25; // Простая переменная работает
		}, false);

	};

	this.myfunc2 = function(){
	do something...
	};

};


В гугле пробовал искать, ничего не нашел.

Пробовал так же забиндить через "this.elem.onmousedown = function(){this.myfunc2();};", но тоже не помогает(

Собственно вопрос в том, как мне забиндить внутреннюю функцию на событие?

Dilettante_Pro 26.05.2016 18:00

Flakky,
Приведите полностью сообщение об ошибке

Decode 26.05.2016 18:15

Flakky, в коллбеке addEventListener'a this будет сам элемент. Так попробуй:

this.elem.addEventListener("mousedown", function(event){
  this.myfunc2();
  this.myvar = 25;
}.bind(this), false);


Либо в конструкторе сохранить this в переменную и вызывать уже через нее.

Dilettante_Pro 26.05.2016 18:19

Decode,
Именно поэтому я и просил полный текст сообщения - может, это натолкнет ТС на мысли...

Flakky 26.05.2016 18:43

Decode, Вы правы, так работает. Спасибо.

Единственное, что теперь меня запутало, так это то, что переменная по this. определялась, при том, что, как вы говорите, this будет ссылаться на Window, а не сам класс..

Decode 26.05.2016 18:45

Flakky, не на window, на элемент который будет в this.elem.

Dilettante_Pro 26.05.2016 18:56

Flakky,
http://javascript.ru/this

Flakky 26.05.2016 23:11

Благодарю, теперь все понятно.


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