javascript - 扩展类方法不公开
问题描述
我正在尝试在 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 模块
谢谢,
解决方案
注意:我是 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是一本关于该主题的深入了解的书。
推荐阅读
- java - 仅对实体类字段的成功响应
- scala - 如何使用通过旋转列生成的从 json 值生成的模式创建新的数据框
- loopback - 如何在环回 4 中更新嵌套模型的属性
- solr - Lucene QueryParse 在解析时丢弃 "
- php - 删除多个产品的“添加到购物车”按钮
- r - 统计 20 天内的病例数
- node.js - 如何在dockerfile中放置双&符号
- javascript - Javascript Object.entries()
- javascript - 使用 localstorage Redux + Next.js 加载初始状态
- javascript - 为什么 [null, undefined, []] == ",," 返回 true