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”也是一个对象文字。我今天剩下的最后一票是支持这个答案。非常有趣的解决方案