当前位置: 首页 > 面试题库 >

es6 Javascript类在回调内使用此代码

夏昊
2023-03-14
问题内容

新的es6类允许您this在方法内部使用self引用变量。
但是,如果类方法具有子函数或回调,则该函数/回调不再有权访问自我引用变量this

class ClassName {
  constructor(dir){
    this.dir = dir;
    fs.access(this.dir, fs.F_OK | fs.W_OK, this.canReadDir);//nodejs fs.access with callback
  }

  canReadDir(err){
    this.dir;// NO ACCESS to class reference of this
  }
  //OR
  aMethod(){
    function aFunc(){
      this.dir;// NO ACCESS to class reference of this
    }
  }
}

有什么解决办法吗?


问题答案:

您有以下选择:

1)使用 箭头 功能:

class ClassName {
  // ...
  aMethod(){
    let aFun = () => {
      this.dir;// ACCESS to class reference of this
    }
  }
}

2)或bind()方法

class ClassName {
  // ...
  aMethod(){
    var aFun = function() {
      this.dir;// ACCESS to class reference of this
    }.bind(this);
  }
}

3)存储this在专用变量中:

class ClassName {
  // ...
  aMethod(){
    var self = this;
    function aFun() {
      self.dir;// ACCESS to class reference of this
    }
  }
}

本文介绍有关thisJavaScript中的和箭头功能的必要详细信息。



 类似资料:
  • 请注意:我已经检查了SO上的其他问题,虽然我可以消除错误,但它还有其他问题。 下面是我现有的代码: 我的适配器类: 修改代码查看各种答案: 现在,我没有得到错误,但是每次都被调用两次,并且recyclerview中的视图每次都在刷新。我做错了什么?请参阅logcat输出:

  • 知识点 理解 Promise 概念,为什么需要 promise 学习 q 的 API,利用 q 来替代回调函数(https://github.com/kriskowal/q ) 课程内容 第五课(https://github.com/alsotang/node-lessons/tree/master/lesson5 )讲述了如何使用 async 来控制并发。async 的本质是一个流程控制。其实在

  • 问题内容: 我正在使用c ++为node.js编写附加组件。 这里有一些片段: 我需要将一个JavaScript函数另存为回调,以便稍后调用。Client类是另一个对象的观察者,应从onAsyncMethodEnds调用javascript回调。不幸的是,当我调用函数“ BeInitiator”时,在回调Call()之前收到“ Bus error:10”错误 感谢建议 问题答案: 您不能从另一个线

  • 新的es6类允许您在方法内部使用自引用变量。 但是,如果类方法具有子函数或回调,则该函数/回调不再具有访问自引用变量 对此有什么解决办法吗?

  • 问题内容: 以下函数从url获取图像并进行加载,然后返回其宽度和高度: 问题是,如果我做这样的事情: 我得到,因为该函数运行但图像尚未加载。 仅当照片已加载且宽度和高度已可用时,如何使用等待/异步返回值? 问题答案: 如何使用/ 将此回调函数转换为Promise? 你不知道与往常一样,您可以使用构造函数。没有语法糖。 仅当照片已加载且宽度和高度已经可用时,如何使用/ 记录值? 你可以做

  • 问题内容: 我认为解决此问题的最佳方法就是粘贴我的代码: 如果我先点击 编辑按钮 和比 确认编辑 ,我试图获得(作为结果)的页面标签 FINALLY我在这里 不幸的是,这并不发生。我单击“ 编辑”按钮 ,然后单击“ 确认编辑” ,则什么也没有发生。 我怎么了 干杯 用新版本更新 问题答案: 好吧,那变得复杂了。是否将调用该操作还取决于组件或其父项之一的属性的结果。由于Bean在请求范围内,因此默认