如果我有一个具有多个键调用同一个函数的对象,并且这个函数是在它的范围之外实现的,如何确定哪个键调用了这个函数?例如:
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
}
最佳答案
有可能
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
对象。现在你要做的是在对象中查找被调用的函数实例,你就完成了。
关于javascript - 如何判断哪个键在javascript中调用了一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56241807/