Javascript对象如何从函数内部获取密钥-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

Javascript对象如何从函数内部获取密钥

2020-03-22 22:27:58 331 1

我已经尝试过使用此代码进行覆盖,'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') }

... 我怎样才能做到这一点?

取消 提交回答
全部回答(1)
  • 方不方便
    2020-03-22 22:30:42

    您所调用的函数没有合理的方法来知道引用它的属性的名称是什么。如果你想的话,你需要改变你的结构。一种方法是绑定函数名作为它的第一个参数:

    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

    0 0
相关问答

1

回答

将具有数字键的JavaScript对象转换为数组

2020-02-06 22:36:27 276浏览量 回答数 1

1

回答

将具有数字键的JavaScript对象转换为数组

2020-01-16 17:50:25 508浏览量 回答数 1

1

回答

js怎么把数组存到json对象

2018-05-10 20:00:21 2402浏览量 回答数 1

1

回答

js怎么将两个数组合并

2018-05-10 20:00:25 2012浏览量 回答数 1

1

回答

js数组怎么取值

2018-05-10 20:00:25 2514浏览量 回答数 1

1

回答

js怎么去掉数组前5位

2018-05-10 20:00:26 4279浏览量 回答数 1

1

回答

js怎么给数组添加元素

2018-05-10 20:00:32 1454浏览量 回答数 1

4

回答

怎么用js定义数组

2018-05-10 20:00:34 1685浏览量 回答数 4

1

回答

js对象怎么生成数组

2018-05-10 20:00:34 1395浏览量 回答数 1

1

回答

js中的数据处理 数组寻址

2016-07-13 17:23:25 1590浏览量 回答数 1
+关注
文章
问答
问答排行榜
最热
最新
相关电子书
更多
Javascript中的对象
立即下载
Javascript中的函数
立即下载
Javascript异步编程
立即下载