node.js 在函数内获取当前函数

js 如何在函数体内部知道 自己在哪个函数内运行呢?

 

打比方:

function a() {
    // 我想在这里知道我的函数名a和函数function a () {...}
}

 

使用Error的调用栈可以匹配到当期执行的函数:

//    获取正在执行的函数
function getExecFunction() {
    let names = new Error().stack.match(/at (.*?) /g);
    let name = names[1].replace('at ', '').trim();
    return eval(name);
}

 

Use Ex:

function a() {
    console.log(getExecFunction());
}

function getExecFunction() {
    let names = new Error().stack.match(/at (.*?) /g);
    let name = names[1].replace('at ', '').trim();
    return eval(name);
}

a();        //[Function: a]

 

如果是在class内部,可以这么写(代码基于ES6):

class A {
    // 获取正在执行的函数
    getExecFunction() {
        let names = new Error().stack.match(/at A\.(.*?) /g);
        let name = names[1].replace('at A.', '').trim();
        return eval(`this.${name}`);
    }

    a() {
        console.log(this.getExecFunction());
    }
}
new A().a();    //    [Function: a]

 

如有错误,请指正,感谢。

posted @ 2017-12-15 19:56  参与商  阅读(2834)  评论(0编辑  收藏  举报