我已经写了记录器服务,但是有一个我不明白的错误。

这是代码的一部分:

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;
    }
}


一个错误:
TypeError: Illegal invocation

主要思想是弃用默认控制台方法

最佳答案

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

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

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

        this.blockDefaultConsoleMethods();
    }

    public log(...args) {
        Function.prototype.apply.call(this._log, console, args); // <--- change here
    }

    private blockDefaultConsoleMethods() {
        console.log = console.info = console.warn = console.error = () => null;
    }
}





  使用Plunker作为示例用法

关于javascript - 用angular2制作了我自己的记录器,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37875437/

10-10 00:42