javascript - 如何使 JavaScript 类实例成为另一个类的实例?
问题描述
我正在尝试使用winston登录我的项目。要创建一个新的记录器,你通常会这样做:
import winston from 'winston';
const logger = winston.createLogger({ ...opts });
但是,我的选项在整个项目中将基本相同,除了一个label
选项,它将是执行日志记录的模块的名称。我不想在 100 个文件中复制createLogger
代码,而是想创建一个包装类,它提供最常见的选项createLogger
,并允许用户为label
构造函数提供一个参数。类的实例应该是winston的Logger
类的一个实例,是的返回值createLogger
。
总而言之,我希望能够做到这一点:
import OurLogger from './our-logger';
const fooModuleLogger = new OurLogger('foo'); // full winston Logger instance
我现在最好的镜头OurLogger.js
看起来像:
import winston from 'winston';
export default class {
constructor(label = 'defaultLabel') {
const defaultOpts = { ... }
// I know this part is wrong. But what's the right way?
this = winston.createLogger({
label,
...defaultOpts
});
}
}
解决方案
您不能分配this
并且不为每个功能都创建包装器方法,一个类在这里感觉不正确。
为什么不直接导出一个函数并使用它呢?
export default function OurLogger(label){
const defaultOpts = { ... }
return winston.createLogger({
label,
...defaultOpts
});
}
然后就
import OurLogger from './our-logger';
const fooModuleLogger = OurLogger('foo'); // full winston Logger instance
推荐阅读
- python - 两个非常相似的正则表达式,其他找不到匹配
- notepad++ - 如何在记事本++中搜索和替换匹配的命中
- rest - Autodesk Forge,.Net API POST 方法不返回新对象 ID
- java - 使用 Microsoft graph Java Sdk 创建发布请求以将用户添加到组
- java - 如何减少 Spring Boot 控制器中的重复代码
- docker - MDNS 从 Kubernetes 内广播?
- javascript - Javascript工具提示没有随着鼠标移动而移动
- node.js - 同一组件中的方法 - 自动更新
- jquery - 在网格中的幻灯片切换上保持单元格 100% 的高度
- wordpress - Wordpress 没有重定向到 HTTPS