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

时间:2018-04-06 17:52:11

标签: javascript

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

例如,如果我有这些功能:

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 () {

        }
    }

}

当我调用 functions.coolfunction2.add() 时,有没有办法记录运行的父函数的名称?

我知道我可以使用变量 this ,但只会输出子函数的名称, add() { {1}} delete()

我怎么知道 save() 已经投放?

我知道这可以通过重写 coolfuntion2 函数中的函数名来手动完成,但有没有办法动态获取名称?

1 个答案:

答案 0 :(得分:1)

您可以将添加到这些方法

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
      }
    });
  })
);

<强>演示

&#13;
&#13;
var functions = {

  coolfunction1: {
    add: function() {

    },
    delete: function() {

    },
    save: function() {

    }
  },

  coolfunction2: {
    add: function() {

      console.log("a is invoked");

    },
    delete: function() {

    },
    save: function() {

    }
  }

};

Object.keys(functions).forEach(t =>
  Object.keys(functions[t]).forEach(t2 => {
    var func = functions[t][t2];
    Object.defineProperty(functions[t], t2, {
      get: function() {
        console.log(t);
        //func();
        return func;
      }
    });
  })
);

functions.coolfunction2.add();
functions.coolfunction2.add();
functions.coolfunction1.add();
&#13;
&#13;
&#13;