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

时间:2015-10-08 12:20:47

标签: javascript ecmascript-6

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

class Child extends Parent { 
    //methods
}

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

我有一个我构建的ES5库,它使用工厂函数来创建新类,在该函数中我做了很多设置工作。我想做所有相同的东西,但ES6类语法的简单性,所以使用我的库的开发人员不需要考虑任何特殊的东西,并可以考虑更简单的类。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

我认为@Mjh试图说的是你可以在父类中实现一个钩子。扩展Parent类的类将能够覆盖该方法。如果他们不想对它做任何事情......那也没关系。

https://jsbin.com/navijusuzo/1/edit?js,console

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();

答案 1 :(得分:-1)

您可以在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

Fiddle Here