@Disainer

Почему переменная класса становится undefined при обращении из метода?

Есть класс, для вопроса я его упростил
в конструкторе инициализируется переменная класса, как объект с параметрами x,y равными нулю
в конструкторе пишу в консоль - все есть
далее идёт обращение к функции вне конструктора, и переменная уже undefined
не могу понять что идет не так

class TMyClass{
	MyVariable;
	
	constructor(){
		this.MyVariable = {x: 0, y: 0};
		console.log("MyVariable: " + this.MyVariable); //[object Object]
	}
	
	MyFunc(e){
		console.log("MyVariable: " + this.MyVariable); //тут undefined 
	}
}

export { TMyClass };


view.php?img=71ffe6681cb0b8e831e2.PNG
  • Вопрос задан
  • 107 просмотров
Решения вопроса 3
Mike_Ro
@Mike_Ro Куратор тега JavaScript
Python, JS, WordPress, SEO, Bots, Adversting
Стрелочная функция не имеет своего this, соответственно возьмет его из скоупа выше:
MyFunc = (e) => {
  console.log("MyVariable: " + this.MyVariable); // oh yes
}
Ответ написан
Комментировать
delphinpro
@delphinpro Куратор тега JavaScript
frontend developer
судя по переменной e могу предположить, что это обработчик события.

import { TMyClass } from './TMyClass';

const obj = new TMyClass;

addEventListener('click', obj.MyFunc.bind(obj))

или 

addEventListener('click', e => obj.MyFunc(e))
Ответ написан
Комментировать
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Классическая потеря контекста. Можно вылечить так:
constructor(){
  this.MyVariable = {x: 0, y: 0};

  this.MyFunc = this.MyFunc.bind(this);
}

Возможно, уже появился какой-то дополнительный синтаксический сахар, который позволяет объявлять метод сразу с прибитым контекстом (помимо arrow function).
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы