• constructor {Function}
    • superConstructor {Function}

    不建议使用 util.inherits()。 请使用 ES6 的 classextends 关键词获得语言层面的继承支持。 这两种方式是[语义上不兼容的][semantically incompatible]。

    从一个[构造函数][constructor]中继承原型方法到另一个。 constructor 的原型会被设置到一个从 superConstructor 创建的新对象上。

    这主要在 Object.setPrototypeOf(constructor.prototype, superConstructor.prototype) 之上添加了一些输入验证。 作为额外的便利,可以通过 constructor.super_属性访问 superConstructor

    1. const util = require('util');
    2. const EventEmitter = require('events');
    3. function MyStream() {
    4. EventEmitter.call(this);
    5. }
    6. util.inherits(MyStream, EventEmitter);
    7. MyStream.prototype.write = function(data) {
    8. this.emit('data', data);
    9. };
    10. const stream = new MyStream();
    11. console.log(stream instanceof EventEmitter); // true
    12. console.log(MyStream.super_ === EventEmitter); // true
    13. stream.on('data', (data) => {
    14. console.log(`接收的数据:"${data}"`);
    15. });
    16. stream.write('运作良好!'); // 接收的数据:"运作良好!"

    使用 ES6 的 classextends 的示例:

    1. const EventEmitter = require('events');
    2. class MyStream extends EventEmitter {
    3. write(data) {
    4. this.emit('data', data);
    5. }
    6. }
    7. const stream = new MyStream();
    8. stream.on('data', (data) => {
    9. console.log(`接收的数据:"${data}"`);
    10. });
    11. stream.write('使用 ES6');