如何分辨javascript中哪个键称为函数

Mah*_*ber 6 javascript function object

如果我有一个带有多个调用同一功能的键的对象,并且该功能在其作用域之外实现,那么如何确定哪个键调用了此功能?例如:

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
}
Run Code Online (Sandbox Code Playgroud)

Ser*_*nko 9

有可能的

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
}
Run Code Online (Sandbox Code Playgroud)

说明:arguments.callee引用arguments对象所属的功能。并且this在函数调用时基本上是“点之前的事情”,因此是您的Population对象。现在,您要做的就是在对象中查找被调用的函数实例,然后完成。