提问人:Dylan B 提问时间:7/4/2022 最后编辑:tborgesDylan B 更新时间:7/4/2022 访问量:37
如何协调“this”引用DOM元素和“this”引用类?
How to reconcile 'this' referencing DOM element and 'this' referencing class?
问:
我在理解如何使用关键字来引用已单击的 DOM 元素时遇到了问题,但也在通常引用该类实例的类中使用它。this
this
下面是相关代码的片段:
class Passwords {
constructor() {
$('.password-column button.steel-button').on('click', this.selectButton);
}
selectButton() {
$(this).toggleClass('selected');
this.columnController();
}
columnController(){
// A function that does something else
}
}
我遇到的问题是它无法识别为函数。
我想这是因为范围以及它如何与“这个”一起工作,但我不确定如何进行。columnController()
在上面的代码中,已成功应用于所有指定的按钮,但错误在 上给出。
确切的控制台错误是:selectButton()
this.columnController()
未捕获的 TypeError:this.columnController 不是函数
先谢谢你。
答:
0赞
Quentin
7/4/2022
#1
你不能用它来表示这两个对象,所以选择一个,然后通过其他机制得到另一个。this
例如:使用箭头函数将值绑定到类,然后从对象中获取元素。this
event
class Passwords {
constructor() {
$('.password-column button.steel-button').on('click', this.selectButton);
}
selectButton = (event) => {
$(event.currentTarget).toggleClass('selected');
this.columnController();
}
columnController() {
console.log("this runs");
}
}
new Passwords();
.selected {
background: blue
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="password-column">
<button class="steel-button">click</button>
</div>
评论
1赞
Bergi
7/4/2022
...或者,将类实例存储在闭包变量 () 中,并使用 访问该元素。const that = this
this
0赞
Dylan B
7/4/2022
被选为正确答案,但值得注意的是,它将 event.currentTarget 标记为已弃用。不过确实有效。
0赞
Quentin
7/4/2022
文档说 currentTarget 是在 v1.3 中添加的,但没有说它已被弃用。
评论