未能覆盖JS函数

时间:2015-04-15 14:32:57

标签: javascript override log4javascript

我正在尝试覆盖名为log4javascript的库中的某些函数。

我尝试了以下内容:

    var _logFatal = log.fatal;
    var _logError = log.error;
    var _logWarn = log.warn;
    var _logDebug = log.debug;

    log.fatal = function(message){
        return _logFatal(stackTrace(message));
    };

    log.error = function(message){
        return _logError(stackTrace(message));
    };

    log.warn = function(message){
        return _logWarn(stackTrace(message));
    };

    log.debug = function(message){
        return _logDebug(stackTrace(message));
    };

但它不起作用,例如,当我调用log.warn('test')时,它失败了Uncaught TypeError: object is not a function。但是如果删除代码的那部分,它就可以正常工作。

我做错了什么?

1 个答案:

答案 0 :(得分:2)

你要做的就是我所看到的“monkey-patching”。

我相信您遇到的问题是您没有调用正在尝试使用正确范围扩展的函数。

尝试这种模式:

var fnPreviousFatal = log.fatal;
log.fatal = function(message) {
    fnPreviousFatal.apply(this, [message]);
}