不清楚的括号指令“ this.fn.bind(this)(super.fn(... args)”)

时间:2019-10-01 01:19:41

标签: javascript typescript

所以在一个项目中,我找到了可以简化为的代码:

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));所在的行。

我第一次看到这样的东西,所以我宁愿保持谨慎,不要破坏任何东西。它与Promise或.bind()无关,不是吗?从我的测试看来,该语句可以简单地简化为this._log(super.error(...args));(但是为什么要复杂化?),有人可以确认吗?

1 个答案:

答案 0 :(得分:0)

是的,您可以并且应该摆脱这种内联绑定。我建议将其移到类的构造函数中(而不是完全摆脱绑定),因为那样您就可以将服务方法(errorwarning等)用作“普通函数” ,如果您需要从模块中导出它们而不暴露LoggerService实例本身,这将很有帮助