#javascript
#javascript
Вопрос:
У меня есть этот класс:
class test{
constructor(){
document.addEventListener('click', handle);
this.handle = this.handle.bind(this);
}
handle(){
console.log(this); //returns document element
}
}
new test()
Я привязываюсь this
к событию handle, но оно все равно возвращает элемент document .
Я пытался использовать функции со стрелками, и это работает, но я хочу знать, могу ли я сделать это без использования функций со стрелками…
Ответ №1:
Назначьте перед привязкой.
Вы думаете, что ссылка будет изменена, однако вы только присваиваете новое значение этому атрибуту, а не изменяете его.
class test {
constructor() {
this.eleFromEstack = "Test"; // Just a test!
this.handle = this.handle.bind(this);
document.addEventListener('click', this.handle);
}
handle() {
console.log(this);
}
}
new test();
<h1>Click!!</h1>
Ответ №2:
Привязывайте this
значение при передаче handler
функции в addEventListener
обратный вызов.
class Test{
field = "hello"
handle(){
console.log(this); //returns document element
}
constructor(){
document.querySelector("#container").addEventListener('click', this.handle.bind(this));
}
}
let test = new Test();
<div id="container">test</div>
Ответ №3:
Неважно, мой локальный сервер кэшировал файл JS с обновленным кодом
Комментарии:
1. Тогда вам, вероятно, следует удалить вопрос
2. Я думал оставить это, потому что, возможно, кто-то совершит ту же глупую ошибку, но, возможно, она слишком широкая и не стоит ее оставлять
3. Если здесь есть реальный вопрос, то его можно оставить, но я не совсем понимаю, что вы пытались сделать. Возможно, если вы сможете уточнить это таким образом, чтобы не ссылаться на вашу ошибку в цепочке инструментов? Я удалю свой downvote, если вы сможете это сделать. По крайней мере, это не ответ.
4. Когда запускался метод handle(), элемент document передавался методу с помощью ключевого слова «this», и я хотел, чтобы «this» вместо этого ссылался на класс.