首页 > 解决方案 > 扩展类方法不公开

问题描述

我正在尝试在 javascript 中扩展一个类并向该类添加一些额外的功能。

const Pino = require('pino');

class Logger extends Pino {
  constructor(options = { name: 'isWorking' }) {
    super(options);
    this.check = "1234";
    this.ppp = () => {}
  }

  rrr() {}
}

let pp = new Logger();
console.log(pp.check)
console.log(pp.ppp)
console.log(pp.rrr)
console.log(pp instanceof Logger)
console.log(pp instanceof Pino)

这是输出

1234
[Function]
undefined
false
false

为什么那个rrr功能没有暴露?我想过重写基类。这应该适用于普通班,这个班有什么特别之处Pino

注意:这里的 pino 基类是 javascript 模块

谢谢,

标签: javascriptnode.jsclassecmascript-6

解决方案


注意:我是 Pino 的维护者。

返回的函数require('pino')工厂函数而不是“构造函数”函数。因此,class糖语法不适用于自定义 Pino 原型:我们不公开原型。

要自定义 Pino,可以使用自己的功能包装一个实例:

const instance = require('pino')()
Object.defineProperties(instance, {
  rrr: {
    value: function () {
      this.info('this is the rrr function')
    }
  }
})

instance.rrr()

我强烈建议学习 Javascript 中对象的真正工作方式,而不是依赖(在我看来是灾难性的)class语法。The Two Pillars of Javascript是一组关于这个主题的优秀文章。You Don't Know JS: this& Object Prototypes是一本关于该主题的深入了解的书。


推荐阅读