在ES6中扩展类时是否可以定义回调?

Is it possible to define callback when your class is extended in ES6

本文关键字:定义 回调 是否 ES6 扩展      更新时间:2023-09-26

基本上,如果调用我的库类,我想做一些设置工作。例如:

class Child extends Parent { 
    //methods
}

我想分配一个函数,当父类被扩展时调用。我想以某种方式得到通知。在它即将发生之前(将方法作为参数附加),或者在将Child类作为参数附加之后。

我建立了一个ES5库,它使用工厂函数来创建新类,并且在该函数中我做了大量的设置工作。我想用ES6类语法的简单性来做同样的事情,所以使用我的库的开发人员不需要考虑什么特别的事情,可以考虑更直接的类。

任何帮助都将非常感激。

我认为@Mjh想说的是你可以在父类中实现一个钩子。扩展Parent类的类将能够覆盖该方法。如果他们不想用它做任何事情……也很好。

https://jsbin.com/navijusuzo/1/edit?js,控制台

class Parent {
  constructor(){
    this.setup();
    this.afterConstruct();
  }
  setup(){
    // Do stuff, validate, init object
  }
  // HOOK to be overriden by classes that extend Parent
  afterConstruct(){
  }
}
class Child extends Parent {
  constructor(){
    super();
  }
  // Override: Implements Hook
  afterConstruct(){
    console.log('Child hooking')
  }
}
new Parent();
new Child();

你可以在ES6构造函数中定义回调:

class Point {
  constructor(x, y, cb) {
    this.x = x;
    this.y = y;
    if (typeof cb === 'function')  return cb();  //If Callback function is available, execute it
  }
}
class ColorPoint extends Point {
  constructor(x, y, color, cb) {
    super(x, y, cb);  //Pass callback to parent constructor
    this.color = color;
  }
}
let cp = new ColorPoint(25, 8, 'green', function () {
  alert('callback called')
});  //Callback function passed
这里的

小提琴