だから、console.log
をラップする方法を見つけたので、ラッパーから呼び出されたときに、ファイル/行番号が呼び出された場所から保存されるようになりました。コンソールログのラッパーを正しいファイル/行番号でラップしますか?
しかし、実際にlogging
が非常に深いレベルにある場合は、何回かそれをもう一度ラップする方法を知りたいと思います。このサンプルコードから
class Debugger {
_log() {
return Function.prototype.bind.call(console.log, console);
}
log = this._log();
specialLog(msg: string) {
this.log('special: ' + msg);
}
}
const debug = new Debugger();
debug.log('hi'); // works perfect: correct file/line number
debug.specialLog('hi'); // line number -> where this.log() is called.
それはlog
として動作するように、どのように私はspecialLog
を変更する必要がありますか?
私は.bind
,.apply
、.call
という文脈では、文脈ではconsole
を渡そうとしましたが、成功しませんでした。
更新:
specialLog(msg: string) {
return this.log.bind(console, 'special ' + msg);
}
debug.specialLog('hi')(); // correct, but notice the extra '()'
これは私が得ることができる最も近いですが、呼び出しの後にそれを実行することなく、それを行う方法はありますか?
アップデート2:jsfiddle
https://jsfiddle.net/mqa1duvr/
がアップデート3:私はそれを作ることができれば
class Debugger {
debug(...)
trace(...)
// and inside each these debug..trace..warn etc..
// there are set colors, timestamps, send log to server etc..
// then, finally after all the filters, there's the "final" log.
_log(...)
}
:私はそれは別のラッパーを通過する必要があります理由:
実際デバッガは次のようになります呼び出し元のコンテキストを持っている間にいくつかの関数を深く調べると、関数を小さく保つことができます。
私は 'Uncaught SyntaxError:Unexpected token ='を取得します。これは有効なJSですか? –
申し訳ありませんが、typescriptタグ – user7552
を追加します。更新については、 'bind'の代わりに' call'を使用してください。 –