0

Есть класс с конструктором и методом класса. В методе объявлена функция, которая выполняется при нажатии на кнопку. Проблема в том, что внутри этой функции не видны объекты класса, объявленные в конструкторе. Как исправить эту проблему?

class user {
    constructor(name) {
        this.name = name;
    }  
    sayName() {
        const button = document.getElementById('btn');
        button.onclick = function() {
            alert(this.name); //Значение this.name не определено в пределах данной функции
        };
    }
}

let user1 = new user('John'); user1.sayName(); //Ничего не выведет, т.к. значение this.name не определено в функции, объявленной внутри метода sayName()

Нужно сделать так, чтобы this.name было видно в пределах всего класса, в т.ч. и во всех функциях, объявленных внутри него. Может быть можно создать глобальную переменную класса, чтобы можно было использовать её или какой-то указатель?

1 Answers1

1

Вам надо прочитать разницу между function и стрелочной функцией в виде контекста

class user {
    constructor(name) {
        this.name = name;
    }  
    sayName() {
        const button = document.getElementById('btn');
        button.onclick = () => {
            alert(this.name); //Значение this.name не определено в пределах данной функции
        };
    }
}

let user1 = new user('John'); user1.sayName();

<button id="btn">click me</button>