Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 26.05.2016, 17:47
Новичок на форуме
Отправить личное сообщение для Flakky Посмотреть профиль Найти все сообщения от Flakky
 
Регистрация: 12.05.2016
Сообщений: 8

ошибка 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();};", но тоже не помогает(

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

Последний раз редактировалось Flakky, 26.05.2016 в 17:51.
Ответить с цитированием
  #2 (permalink)  
Старый 26.05.2016, 18:00
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Flakky,
Приведите полностью сообщение об ошибке
Ответить с цитированием
  #3 (permalink)  
Старый 26.05.2016, 18:15
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

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

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


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

Последний раз редактировалось Decode, 26.05.2016 в 18:42.
Ответить с цитированием
  #4 (permalink)  
Старый 26.05.2016, 18:19
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Decode,
Именно поэтому я и просил полный текст сообщения - может, это натолкнет ТС на мысли...
Ответить с цитированием
  #5 (permalink)  
Старый 26.05.2016, 18:43
Новичок на форуме
Отправить личное сообщение для Flakky Посмотреть профиль Найти все сообщения от Flakky
 
Регистрация: 12.05.2016
Сообщений: 8

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

Единственное, что теперь меня запутало, так это то, что переменная по this. определялась, при том, что, как вы говорите, this будет ссылаться на Window, а не сам класс..
Ответить с цитированием
  #6 (permalink)  
Старый 26.05.2016, 18:45
Профессор
Отправить личное сообщение для Decode Посмотреть профиль Найти все сообщения от Decode
 
Регистрация: 31.01.2015
Сообщений: 576

Flakky, не на window, на элемент который будет в this.elem.
Ответить с цитированием
  #7 (permalink)  
Старый 26.05.2016, 18:56
Профессор
Отправить личное сообщение для Dilettante_Pro Посмотреть профиль Найти все сообщения от Dilettante_Pro
 
Регистрация: 27.11.2015
Сообщений: 2,899

Flakky,
http://javascript.ru/this
Ответить с цитированием
  #8 (permalink)  
Старый 26.05.2016, 23:11
Новичок на форуме
Отправить личное сообщение для Flakky Посмотреть профиль Найти все сообщения от Flakky
 
Регистрация: 12.05.2016
Сообщений: 8

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



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
не работает ajax в IE xber9 jQuery 5 27.08.2013 21:04
глобальные или локальные обьекты l-liava-l Оффтопик 27 10.02.2013 23:45
Автоматический пересчёт при смене значения. sergeos Работа 3 05.02.2013 13:44
Передача события обработчику внутри класса SuperDennis Events/DOM/Window 4 29.02.2012 18:41
Обработка события элемента внутри создавшего его объекта pauluss Общие вопросы Javascript 10 10.09.2010 17:01