3

例如,我这里有一个对象

var obj = {a:1,b:2,c:3}

如何将 obj'name 获取到字符串“obj”?

4

2 回答 2

7

你不能。一个对象可以用任意数量的变量命名,例如

var obj = {a:1,b:2,c:3};
var obj2 = obj;
var otherobj = obj2;

所有这些变量都引用同一个对象——它没有特定的名称。

于 2013-09-06T03:22:06.523 回答
5

您无法访问变量的名称。

但是,您可以利用函数是 javascript 中的一流对象这一事实来发挥自己的优势,具体取决于您的用例。由于每个函数对象都具有设置为函数名称的“名称”属性,因此您可以执行以下操作:

var obj = function obj(){ return {a:1,b:2,c:3}; };
console.log("obj.name is: " + obj.name);

> "obj.name is obj"

请注意,我将命名函数分配给obj而不是更常见的匿名函数——因为匿名函数没有名称值。

var obj = function(){ return {a:1,b:2,c:3}; };
console.log("obj.name is: " + obj.name); 

> "obj.name is: "

因此,通过这种方式,您就有了一个对象,其名称值可作为字符串访问。但有一个警告。如果要访问该,则必须调用该函数:

console.log(obj());

> {a: 1, b: 2, c: 3}

这是因为变量引用的是函数,而不是函数返回的值:

console.log(obj);

> function obj(){ return {a:1,b:2,c:3}; }

请注意,此技术仍然不会为您提供变量的名称,因为您可以分配obj给另一个名为 的变量jbo

var obj = function obj(){ return {a:1,b:2,c:3}; };
console.log("obj.name is: " + obj.name);
var jbo = obj;
console.log("jbo.name is: " + jbo.name);

> "obj.name is obj"
> "jbo.name is obj"
于 2013-09-06T04:34:45.953 回答