自动将控制台.log添加到每个函数
2022-08-30 05:36:13
有没有办法让任何函数输出一个控制台.log语句,当它通过在某个地方注册一个全局钩子(即,不修改实际函数本身)或通过其他方式调用时?
有没有办法让任何函数输出一个控制台.log语句,当它通过在某个地方注册一个全局钩子(即,不修改实际函数本身)或通过其他方式调用时?
下面是使用所选函数扩充全局命名空间中所有函数的方法:
function augment(withFn) {
var name, fn;
for (name in window) {
fn = window[name];
if (typeof fn === 'function') {
window[name] = (function(name, fn) {
var args = arguments;
return function() {
withFn.apply(this, args);
return fn.apply(this, arguments);
}
})(name, fn);
}
}
}
augment(function(name, fn) {
console.log("calling " + name);
});
一个缺点是调用后创建的任何函数都不会具有其他行为。augment
至于我,这看起来是最优雅的解决方案:
(function() {
var call = Function.prototype.call;
Function.prototype.call = function() {
console.log(this, arguments); // Here you can do whatever actions you want
return call.apply(this, arguments);
};
}());