Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/google-sheets/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Javascript中获取调用函数的名称?_Javascript - Fatal编程技术网

如何在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();
}