1 回答
TA贡献1827条经验 获得超9个赞
您调用的函数没有合理的方法知道引用它的属性的名称。如果你愿意,你需要改变你的结构。一种方法是将函数的名称绑定到它作为它的第一个参数:
const json = {
'keyone' : function (name) {
console.log(name);
} ,
'keytwo' : function (name) {
console.log(name);
}
};
for (const [key, func] of Object.entries(json)) {
json[key] = func.bind(null, key);
}
json.keyone(); // "keyone"
json.keytwo(); // "keytwo"
在不改变结构的情况下执行此操作的不合理方法是在现代浏览器中使用,这种方法在严格模式下不起作用并且我不推荐。arguments.callee.name在现代浏览器中,您的函数具有名称(它们的名称来自您分配给它们的属性)。不推荐使用的arguments.callee属性为您提供了对被调用函数的引用,您可以从中获取它name:
const json = {
'keyone' : function () {
console.log(arguments.callee.name);
} ,
'keytwo' : function () {
console.log(arguments.callee.name);
}
};
json.keyone();
json.keytwo();
但同样,我强烈建议改为更改您的结构。callee已弃用,并且在严格模式下不起作用,并且较旧的浏览器(不支持 ES2015 的隐含函数名称的浏览器)不分配函数名称。
添加回答
举报