我正在尝试创建一个泛型函数(例如'displayFuncName()'),我可以在不同的函数定义中调用它(例如'foo()'),因此它将在console.log中创建函数名称(' foo'在这个例子中)。 类似的东西:
var displayFuncName = function(){
console.log("caller function name: " + some parameter);
}
var foo = function(){
displayFuncName(); // should console log "caller function name: foo
}
我知道过去曾以不同方式询问过,但似乎有一些不赞成的选项,其中一些只是显示'displayFuncName'函数名,这当然不是我想要的。
答案 0 :(得分:2)
由于arguments.callee
在严格模式下引发错误并且不再支持arguments.caller
,因此对您来说可能是更好的选择:
Function.prototype.logName = function() {
var fn = this;
return function() {
console.log(fn.name);
return fn.apply(this, arguments);
}
}
var f = function named() {}.logName();
f(); // logs `named`
通过这种方式,您可以调用logName
来查找要在其调用时记录名称的每个函数。
答案 1 :(得分:0)
console.log("caller is " + arguments.callee.caller.name);
答案 2 :(得分:0)
如果你要使用theCallerFunction.name,那么拥有函数名称(或函数本身)会不会更容易?
这将以更简单的方式为您提供完全相同的结果。 .name也不太可能被折旧。
var displayFuncName = function(callerFunc){
console.log("caller function name: " + callerFunc.name);
}
var function = foo(){
displayFuncName(foo);
}
我相信“arguments.callee.caller.name”是折旧的。
答案 3 :(得分:0)
您可以使用类似
的内容,而不是从每个方法调用泛型函数arguments.callee.caller.name
这将为您提供调用您的函数的函数的名称。 如果在泛型方法中使用它,那么将为您提供要在其中了解调用者的函数的名称。但是,如果你有一个共同的假设,你想知道你的呼叫者的呼叫者,你可以使用这样的东西。
firstFunction();
function firstFunction(){
secondFunction();
}
function secondFunction(){
whoCalled();
}
function whoCalled(){
alert("caller is " + arguments.callee.caller.arguments.callee.caller.name);
}
答案 4 :(得分:0)
一个解决方案就是:
var displayFuncName = function(o) {
console.log(o.name);
}
var foo = function(){
displayFuncName(foo);
console.log(foo.name); // also possible
}
foo();
但是你可以找到更多解决方案。
答案 5 :(得分:0)
var displayFuncName = function(){
console.log("caller function name: " + arguments.callee.caller.name );
}
function foo(){
displayFuncName(); // should console log "caller function name: foo
}
foo();
或者如果您想要整个功能,那么您可以使用
var displayFuncName = function(){
console.log("caller function name: " + arguments.callee.caller.toString());
}
var foo = function(){
displayFuncName(); // should console log "caller function name: foo
}
foo();
符合您的要求。