这是一种选择,虽然不完全确定它有多可靠,但感觉有点不对:
(function () {
var oldCall = Function.prototype.call;
var newCall = function(self) {
Function.prototype.call = oldCall;
console.log('Function called:', this.name);
var args = Array.prototype.slice.call(arguments, 1);
Function.prototype.call = newCall;
this.apply(self, args);
}
Function.prototype.call = newCall;
})();
如您所见,它覆盖了call
函数 - 当您尝试调用时这会产生一个小问题,console.log()
因此您需要将函数交换回来。但它似乎工作!
编辑
由于这被标记为 CoffeeScript:
do ->
oldCall = Function::call
newCall = (self) ->
Function::call = oldCall
console.log "Function called: #{this.name}"
args = Array.prototype.slice.call arguments, 1
Function::call = newCall
this.apply self, args
Function::call = newCall