首页 > 解决方案 > 不明确的括号指令“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));(但为什么要复杂化?),有人可以确认吗?

标签: javascripttypescript

解决方案


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


推荐阅读