Javascript 在angular2做了我自己的记录器

Javascript 在angular2做了我自己的记录器,javascript,typescript,angular,ecmascript-6,angular-services,Javascript,Typescript,Angular,Ecmascript 6,Angular Services,我写了日志服务,但我有一个错误,我不能理解 以下是代码的一部分: import { Injectable } from "@angular/core"; @Injectable() export class LoggerService { private _log: Function; constructor() { this._log = console.log; this.blockDefaultConsoleMethods();

我写了日志服务,但我有一个错误,我不能理解

以下是代码的一部分:

import { Injectable } from "@angular/core";
@Injectable()
export class LoggerService {
    private _log: Function;

    constructor() {
        this._log   = console.log;

        this.blockDefaultConsoleMethods();
    }

    public log(...args) {
        this._log(args);
    }

    private blockDefaultConsoleMethods() {
        console.log = console.info = console.warn = console.error = () => null;
    }
}
错误:
类型错误:非法调用


主要思想是反对默认的控制台方法

调用
console.log
,像这样直接调用是行不通的。您可以尝试这样调用它:

从“@angular/core”导入{Injectable};
@可注射()
导出类日志服务{
私有日志:函数;
构造函数(){
这是.\u log=console.log;
this.blockDefaultConsoleMethods();
}
公共日志(…args){
Function.prototype.apply.call(this.\u log,console,args);//null;
}
}

例如使用


代码中的错误出现在哪里?@toskv当我调用某个方法时,您的示例中的代码行是什么?您如何调用该服务?如何注入它?我在bootstrap方法中注入logger,并在Component的构造函数中获取它们console对象直到第一次为特定选项卡打开开发人员工具时才公开。此外,
console.log
是否期望内部有一个
这个
对象来访问它的对象的成员,而您没有像以前那样直接调用它。这就是为什么需要向它添加上下文,就像使用
函数.prototype.apply.call一样(请参阅
控制台
参数)。