Так alert работает:
class Test {
#shown;
constructor() {
this.#shown = 'hello';
this.showMessage.bind(this);
}
showMessage() {
alert(this.#shown);
}
}
var test = new Test;
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div class="container">
<button class="element" onclick="test.showMessage();">кнопка</button>
</div>
<script src="test.js"></script>
</body>
</html>
А так alert не работает:
class Test {
#shown;
constructor() {
this.#shown = 'hello';
this.showMessage.bind(this);
}
showMessage() {
alert(this.#shown);
}
}
var test = new Test;
document.addEventListener('DOMContentLoaded', function() {
let element = this.querySelector('.element');
element.addEventListener('click', test.showMessage);
})
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<div class="container">
<button class="element">кнопка</button>
</div>
<script src="test.js"></script>
</body>
</html>
Почему во втором случае alert() не страбатывает, если в обоих случаях я привязываю событие на один и тот же элемент и в обоих случаях использую bind() чтобы this всегда было в контексте класса Test?
element.addEventListener('click', () => { test.showMessage() });и пр. .... А вообще andreymal прав – Алексей Шиманский Nov 06 '23 at 18:19