javascript - 如何访问匿名函数中的类方法
问题描述
我的 JS 类和 Promise 的回调中有一个方法,我希望它调用另一个类方法。
class MyClass {
myClassMethod(arg1) {
// this method did get called
}
aSecondClassMethod() {
//...
}
methodWithPromise() {
var myClassMethod = this.myClassMethod;
let aPromise = methodReturnPromise();
aPromise.then(function (value) {
myClassMethod(value);
}
}
所以我创建了一个 var 调用myClassMethod
并将其设置为this.myClassMethod
. 当我调试代码时,myClassMethod 确实在then
Promise 的回调中被调用。
我遇到的问题是当我myClassMethod()
调用其他类方法()时,即
myClassMethod(args) {
aSecondClassMethod();
}
我得到错误说aSecondClassMethod
是未定义的。我试过了
myClassMethod(args) {
this.aSecondClassMethod();
}
但它给了我同样的错误。我想我可以通过为 myClassMethod() 调用的每个类方法声明一个 var 来解决这个问题。
var aSecondClassMethod= this.aSecondClassMethod;
但这似乎很麻烦,以维护未来的代码。
我想知道是否有更好的方法来做到这一点。
解决方案
使用箭头函数,因为它捕获this
封闭上下文的值。
aPromise.then(value => this.myClassMethod(value));
推荐阅读
- apache-spark - Spark 性能从 Dataframe 保存到 hdfs 或 hive 的大型数据集
- sql-server - 我们可以使用 Execute Sql 任务截断 Excel 工作表中的数据吗?
- java - 从 Spring Boot 为 Angular 应用程序生成 jwt 令牌
- php - 如何覆盖默认 Psr\LogLoggerInterface 别名
- php - 如何根据用户是否登录显示或隐藏信息
- android - 如何在地图上的标记片段中设置图像
- ruby-on-rails - 单击编辑按钮后,之前上传的文件未显示在 Rails 表单上
- continuous-integration - travis: sh: 0: 无法打开 /etc/init.d/xvfb
- php - 如何用特定键对数组值求和
- mysql-workbench - 如何通过 VPN 连接到数据库?