コンテキストを失わずにロギングをラップする 2 つの方法を次に示します。1 つ目は、呼び出し側から見ると少し見にくいです。2 番目は、ログに記録された内容の詳細が必要ない場合にのみ使用できます。
デモについては、JSFiddle を参照してください: http://jsfiddle.net/epQ95/1/
// logger method 1: allows for fully functional log-wrapping without losing context,
// but, it is very ugly from the caller's perspective.
var debug = function () {
// do my extra special stuff
window.console.log("logging to server 1: ", arguments);
// do regular console logging, if possible
if (window.console && window.console.log) {
return window.console.log.apply.bind(window.console.log, window.console, arguments);
} else {
return function () {};
}
};
// caller
debug("logger method", 1)();
// logger method 2: pretty calling, but you don't know what was logged,
// just that something definitely was.
var Logger = {};
Logger.__defineGetter__("debug", function () {
// do my extra special stuff
window.console.log("logging to server 2: don't know what was logged");
// do regular console logging, if possible
if (window.console && window.console.log) {
return console.log.bind(window.console);
} else {
return function () {};
}
});
// caller
Logger.debug("logger method", 2);