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)
有可能的
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对象。现在,您要做的就是在对象中查找被调用的函数实例,然后完成。