Javascript 如何获取被调用函数的父函数名

Javascript 如何获取被调用函数的父函数名,javascript,Javascript,我试图获取被调用函数的父函数的名称 例如,如果我有以下函数: var functions = { coolfunction1: { add: function () { }, delete: function () { }, save: function () { } }, coolfunction2: { add: function () {

我试图获取被调用函数的父函数的名称

例如,如果我有以下函数:

var functions = {

    coolfunction1: {
        add: function () {

        },
        delete: function () {

        },
        save: function () {

        }
    }, 

    coolfunction2: {
        add: function () {

            // i want to console.log() the name of the parent of this function,
            // output: coolfunction2

        },
        delete: function () {

        },
        save: function () {

        }
    }

}
当我调用
函数.coolfunction2.add()时,是否有方法记录运行的父函数的名称

我知道我可以使用变量
this
,但它只输出子函数的名称,
添加()
删除()
保存()

我怎么知道
CoolFunction2
已运行


我知道这可以通过在
add()
函数中重写函数名手动完成,但是有没有办法动态获取名称?

您可以向这些方法添加getter,如下所示:

Object.keys(functions).forEach(t =>
  Object.keys(functions[t]).forEach(t2 => {
    var func = functions[t][t2]; //save a reference to function since it won't be a function anymore once a getter is assigned
    Object.defineProperty(functions[t], t2, {
      get: function() {
        console.log(t); //print the name of parent property or grand-parent property, etc
        //func();
        return func; //return the reference to this function
      }
    });
  })
);
演示

var函数={
功能1:{
添加:函数(){
},
删除:函数(){
},
保存:函数(){
}
},
功能2:{
添加:函数(){
log(“a被调用”);
},
删除:函数(){
},
保存:函数(){
}
}
};
Object.keys(functions).forEach(t=>
Object.key(函数[t]).forEach(t2=>{
var func=函数[t][t2];
对象定义属性(函数[t],t2{
get:function(){
控制台日志(t);
//func();
返回函数;
}
});
})
);
functions.coolfunction2.add();
functions.coolfunction2.add();

functions.coolfunction1.add()不,没有。考虑做<代码>函数.OOOS=函数。然后调用
functions.oops.add()
,您希望使用哪个名称?对象没有名称,除非您在某处硬编码。代码中没有父函数。“函数”是一个对象文字,“coolfunction1”也是一个对象文字。我今天剩下的最后一票是支持这个答案。非常有趣的解决方案