无法覆盖 JS 函数
Failing to override JS functions
我正在尝试覆盖名为 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
。但是如果我删除那部分代码它就可以正常工作。
我做错了什么?
你正在尝试做的是我看到的所谓的“monkey-patching”。
我认为您遇到的问题是您没有在正确的范围内调用您试图扩展的函数。
试试这个模式:
var fnPreviousFatal = log.fatal;
log.fatal = function(message) {
fnPreviousFatal.apply(this, [message]);
}
我正在尝试覆盖名为 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
。但是如果我删除那部分代码它就可以正常工作。
我做错了什么?
你正在尝试做的是我看到的所谓的“monkey-patching”。
我认为您遇到的问题是您没有在正确的范围内调用您试图扩展的函数。
试试这个模式:
var fnPreviousFatal = log.fatal;
log.fatal = function(message) {
fnPreviousFatal.apply(this, [message]);
}