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

Javascript Class Call Super And Use This in Callback

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

基础class:

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

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

ReferenceError: Must call super constructor in derived class before accessing 'this' or returning from derived constructor

/**
 * 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 错误):

Missed superclass's construction invocation

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

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

您可以尝试在 Sensor 中将此绑定到您的回调,这将是任何 class 扩展 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{}
    });
  }
}