Javascript 类调用 Super 并在回调中使用它

标签 javascript node.js eslint super superclass

我有一个传感器类和一个扩展它的类。这两个类的构造函数都使用异步操作。

基类:

/**
 * Basic sensor class
 */
class Sensor {
  /**
   * Constructor function
   * @param {object} options - sensor options
   * @param {*} callback - fn(err)
   */
  constructor(options, callback) {
    ...
    callback(null);

版本 A(失败): 扩展类,在super的回调中调用:

ReferenceError:在访问“this”或从派生构造函数返回之前必须调用派生类中的 super 构造函数

/**
 * Mock of the Chirp water level sensor.
 */
class ChirpSensorMock extends SensorMock {
  /**
   * Constructor function
   * @param {object} options - sensor options
   * @param {*} callback - fn(err)
   */
  constructor(options, callback) {
    super(options, (err) => {
      if (err) { return callback(err); }
      async.eachSeries(this.detectors,

版本 B(可以工作,但出现 eslint 错误):

错过了父类(super class)的构造调用

  constructor(options, callback) {
    async.series([
      (next) => super(options, next),
      (next) => {
        async.eachSeries(this.detectors,

有没有办法使用回调(并避免async/await)来调用super并在回调中使用this?或者我应该忽略 eslint 错误,例如with //eslint-disable-next-line constructor-super

最佳答案

您可以尝试将 Sensor 中的 this 绑定(bind)到您的回调,该回调将是扩展 Sensor 的任何类的回调的 this 值(在箭头函数中不起作用)

    class Sensor {
  /**
   * Constructor function
   * @param {object} options - sensor options
   * @param {*} callback - fn(err)
   */
  constructor(options, callback) {
    ...
    callback.call(this,null);
  }
}

class ExtendSensor extends Sensor{
  constructor(){
    super(option, function(v){
    console.log(v, this) //v == null, this == ExtendSensor{}
    });
  }
}

关于Javascript 类调用 Super 并在回调中使用它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57091359/

相关文章:

javascript - 客户端和服务器的时间不一样,为什么?

javascript - 将对象名称转换为所需格式的最佳方法是什么

typescript - 处理 Promise 执行器函数 ESLint 错误

angular - ESLint - 只允许绝对导入路径而不是相对路径

javascript - 我如何让 DOM 知道动态创建的新元素?

javascript - 向 React 组件动态添加任意类型的子组件

javascript - 绕过 event.stopPropagation

javascript - Postgres - 使用什么列类型来存储嵌套数组

javascript - 使用 Node 检查器调试 V8

javascript - eslint await 期望一个赋值或函数调用,而是看到一个表达式