javascript - 不明确的括号指令“this.fn.bind(this)(super.fn(...args)”
问题描述
所以在一个项目中,我发现了可以简化为的代码:
export abstract class Logger {
private static log(level: LogLevels, ...args: Array<any>) {/**/}
public error(...args: Array<any>): LogData {
return Logger.log(LogLevels.ERROR, ...args);
}
}
export class LoggerService extends Logger {
public error(...args: Array<any>): any {
return this._log.bind(this)(super.error(...args));
}
private _log(logData: LogData) {
let logstashLoggerData = this.extendLoggerData(logData);
return this.logStashApi.log(logstashLoggerData)
.toPromise()
.catch(err => console.error(err));
}
}
我有点担心this._log.bind(this)(super.error(...args));
.
我第一次看到这样的东西,所以我更喜欢谨慎,不要破坏任何东西。这不是任何承诺或.bind()
特定的东西,是吗?从我的测试来看,该语句似乎可以简单地简化为this._log(super.error(...args));
(但为什么要复杂化?),有人可以确认吗?
解决方案
是的,您可以而且应该摆脱这种内联绑定。我建议将它移到类的构造函数中(而不是完全摆脱绑定),因为这样您就可以将服务方法(error
等warning
)用作“普通函数”,如果您需要导出,这将很有帮助它们来自您的模块,而不暴露 LoggerService 实例本身
推荐阅读
- javascript - 如何从所述对象内的 onmove 事件设置对象的属性?
- r - 我无法安装或运行 mlr 包
- python - Python matplotlib:如何在 plt plot markerfacecolor 中包含自定义颜色列表
- discord - 创建消息 --> 机器人反应
- python - 如何使用 Grakn Python 驱动程序检索所有变量
- python - 两个分类交叉熵之间的凸组合
- mongodb - 从 docker 中的流星应用程序连接到外部 mongodb
- angular - 如何使用 Angular-Ionic 从 AWS 存储库下载图像
- reactjs - 反应两个 useStates,一个依赖于另一个
- python - 数独回溯算法求解器引发 RecursionError