我已经尝试过使用此代码进行覆盖,'keyone'并且可以正常工作。
const json = { 'keyone' : function () { console.log(Object.keys(this)[0]) // it prints keyone when call json.keyone() } , 'keytwo' : function () { console.log(Object.keys(this)[1]) // it prints keytwo when call json.keytwo() } } 此代码在浏览器上不起作用,此返回值window 我想在以下示例的函数中返回键名
...
'keyname' : function(){ console.log('code for printing this function's keyname') }
... 我怎样才能做到这一点?
您所调用的函数没有合理的方法来知道引用它的属性的名称是什么。如果你想的话,你需要改变你的结构。一种方法是绑定函数名作为它的第一个参数:
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,因为它在严格模式下无法工作,我也不建议这样做。在现代浏览器中,函数有名称(它们的名称来自分配给它们的属性)。弃用的参数。callee属性给你一个被调用函数的引用,你可以从中得到它的名字: const json = { 'keyone' : function () { console.log(arguments.callee.name); } , 'keytwo' : function () { console.log(arguments.callee.name); } };
json.keyone(); json.keytwo();
但是,我再次强烈建议改变你的结构。callee是不支持的,并且不能在严格模式下工作,而且旧的浏览器(不支持ES2015隐含的函数名)不分配函数名。
回答来源:stackoverflow
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。