javascript - 无法将此绑定到功能
问题描述
我有一个 DOM 元素 btn 并具有侦听此元素的 setTimeout 功能。我想在函数运行时删除我的监听器,以防止多次调用 setTimeout 和时间重叠,但是在我的回调函数中是 window? 我尝试使用绑定,但它不工作
const checkTable = () => {
this.removeEventListener('click', checkTable);
console.log(this); // i get "window"
setTimeout(() => {
//some code
}, 3000);
};
const app = () => {
const checkBtn = document.querySelector('.check-btn');
checkBtn.addEventListener('click', checkTable.bind(checlBtn))
};
app();
和 onclick 事件的结果相同
解决方案
你不能调用.bind()
箭头函数。箭头函数用于自动使用this
定义位置的值。为此,您checkTable
需要成为“正常”功能。
function checkTable() {
this.removeEventListener('click', checkTable);
console.log(this); // i get "window"
setTimeout(() => {
//some code
}, 3000);
}
推荐阅读
- intellij-idea - Intellij:注释仅在源级别为 1.5 或更高版本时可用
- css - 侧导航栏响应折叠 Bootstrap 4
- java - 使用递归的线性搜索的递归关系
- wordpress - 未加载 Wordpress https css 和 js 脚本,
- flutter - 带计时器的 StreamBuilder ListView
- numpy - 为什么特征向量与对应特征值的乘积不等于原矩阵与特征向量的乘积?
- java - 当我们将 JsonNode 类型转换为 ObjectNode 并插入时,是否每次都会创建一个新的堆内存?
- ios - SwiftUI:更改循环内的按钮颜色
- python - 使用 Dask 并行化通用 python 代码
- javascript - 在 Mapbox gl js 中更改地图样式后我无法添加新图层