javascript - 如何在该类方法的匿名函数之一中调用类方法?
问题描述
我有以下内容:
class Button_Event {
add_click() {
this.button_jquery_object.on('click', function(e){
this.add_loading();
run_function_by_name(this.ajax_callback).done(function() {
this.remove_loading();
});
});
}
}
但是当我运行它时,会出现以下错误:
Uncaught TypeError: this.add_loading is not a function
……理所当然。我试图在匿名函数中调用一个类的方法。我觉得好像我不应该这样做,但我需要这样做。如何才能做到这一点?
我相信我也在寻求以某种方式在我的匿名函数主体上强制执行“this”范围。
解决方案
传统解决方案:存储this
在局部变量中
add_click() {
const self = this;
this.button_jquery_object.on('click', function(e){
self.add_loading();
});
}
现代解决方案:使用箭头函数,自动this
从上下文绑定
add_click() {
this.button_jquery_object.on('click', (e) => {
this.add_loading();
});
}
奇怪的解决方法:手动绑定this
到函数
add_click() {
this.button_jquery_object.on('click', function(e){
this.add_loading();
}.bind(this));
}
推荐阅读
- python - Pandas:如何迭代聚合的 groupby
- typescript - NestJS 在 e2e 测试中模拟 JWT 身份验证
- azure-devops - 如何使用 azure 管道为我的 aspnetcore 3.0 项目(发布到 IIS)启用 CI/CD
- r - 根据匹配值覆盖数据框中的特定值
- sql - 使用 OR 和 AND 运算符的 MS Access SQL 问题
- flutter - Flutter 遍历 List 并访问索引
- python - 在另一个线程上调用的 os._exit() 不会退出程序
- python - 如何有效地总结时间范围内的重叠时间间隔?
- three.js - 无法在 Linux 中使用 three.js 将网格平面添加到 Autodesk 查看器中?
- node.js - 如何在 lambda 函数中使用 nodejs 将 mongodb 输出存储在变量中?