首页 > 解决方案 > 如何判断哪个键调用了javascript中的函数

问题描述

如果我有一个具有多个键调用相同函数的对象,并且该函数在其范围之外实现,如何确定哪个键调用了该函数?例如:

function tellYourAge() {
   return function()
   {
       // I already know here that this refers to Population
       // For example, console.log(this) will print the Population object
   }
}

{
   let Population = {
     Mahdi: tellYourAge(),
     Samuel: tellYourAge(),
     Jon: tellYourAge()
   };

   Population.Mahdi(); // It should log 18
   Population.Samuel(); // It should log 20
   Population.Jon(); // It should log 21
}

标签: javascriptfunctionobject

解决方案


有可能的

function tellYourAge() {
   return function()
   {
       var f = arguments.callee;
       var key = Object.keys(this).filter(key => this[key] === f)[0];
       console.log(key);
   }
}

{
   let Population = {
     Mahdi: tellYourAge(),
     Samuel: tellYourAge(),
     Jon: tellYourAge()
   };

   Population.Mahdi(); // prints Mahdi
   Population.Samuel(); // prints Samuel
   Population.Jon(); // prints Jon
}

解释:arguments.callee是对arguments对象所属函数的引用。并且this在函数调用时基本上是“点之前的东西”,因此是你的Population对象。现在你要做的是在对象中查找被调用的函数实例,你就完成了。


推荐阅读