如何在Javascript中获取调用函数的名称?
考虑下面的例子如何在Javascript中获取调用函数的名称?,javascript,Javascript,考虑下面的例子 var obj = function(){}; function apply(target, obj) { if (target && obj && typeof obj == "object") { for (var prop in obj) { target[prop] = obj[prop]; } } return target; } apply(obj.
var obj = function(){};
function apply(target, obj) {
if (target && obj && typeof obj == "object") {
for (var prop in obj) {
target[prop] = obj[prop];
}
}
return target;
}
apply(obj.prototype, {
firstFunction: function (){
this.secondFunction();
},
secondFunction: function (){
// how do I know what function called me here?
console.log("Callee Name: '" + arguments.callee.name + "'");
console.log("Caller Name: '" + arguments.callee.caller.name + "'");
}
});
var instance = new obj();
instance.firstFunction();
更新
两个答案都非常棒。非常感谢。然后,我研究了在对象中调用递归函数或父函数的问题,并在这里找到了解决方案。这将允许我在不使用arguments.callee/caller属性的情况下检索函数名
给函数命名 比如: 看看这个函数名是该函数的一个不可变属性,在初始函数表达式中设置
var notTheName = function thisIsTheName() { ... }
someObj.stillNotTheName = function stillTheName() { ... }
如果您的函数表达式没有名称,则(毫不奇怪)无法通过名称来识别它。将一个函数赋给一个变量并没有给它一个名称;如果是这种情况,则无法确定分配给多个变量的表达式的名称
您应该将firstFunction
的name
属性表示为
firstFunction: function firstFunction(){
this.secondFunction();
}
另外,
arguments.callee
也不推荐使用。有关参数的历史记录的详细说明,请参见。被调用方
请注意,参数。被调用方
已弃用且在严格模式下不可用。我的下一个问题是,如果arguments.callee已弃用,那么什么是好的解决方案/解决方法?我在您提供的链接中阅读了历史记录,但没有找到可接受的解决方案。我在MDN上找到了在函数体中调用函数的解决方案
firstFunction: function firstFunction(){
this.secondFunction();
}