Javascript:如何获取实例的名称?

Javascript:如何获取实例的名称?,javascript,object,instance,Javascript,Object,Instance,我创建了一个名为foo的类: foo = function() { ... } 然后,我从foo类创建了一个名为pear的对象: pear = new foo(); 然后我将pear对象放入数组: array_obj = [pear]; 因此,当我通过“for循环”解析数组_obj时,我想得到实例的名称,即“pear”字符串: for(var i = 0; i < array_obj.length; i++) { console.log(array_obj[i].name);

我创建了一个名为foo的类:

foo = function()
{
...
}
然后,我从foo类创建了一个名为pear的对象:

pear = new foo();
然后我将pear对象放入数组:

array_obj = [pear];
因此,当我通过“for循环”解析数组_obj时,我想得到实例的名称,即“pear”字符串:

for(var i = 0; i < array_obj.length; i++)
{
    console.log(array_obj[i].name);
} 
for(变量i=0;i
但它不起作用,因为
array\u obj[i].name
不返回“pear”名称

你有主意吗?提前衷心感谢您。

更改您的功能:

foo = function(name)
{
   this.name = name;
}
您的电话:

var pear = new foo("pear");
更改您的功能:

foo = function(name)
{
   this.name = name;
}
您的电话:

var pear = new foo("pear");

你不能这样做。1-它不起作用,2-对象知道引用它的变量名称是“层冲突”

此外,变量名也为程序员提供了方便。它们可以通过程序员的选择进行更改,甚至可以通过缩小器或模糊器等自动更改

因此,如果名称真的很重要,那么它要么需要成为对象本身的属性(根据@Paulo的回答,在构造函数中传递),要么需要维护一个将“人类可读名称”映射到各个对象的“哈希”(也称为“映射”):

var map_obj = { pear: new foo() };

然后,您可以迭代该映射的键(
Object.keys(map\u obj)
),按名称查找每个对象。但是在这种情况下,每个名称都必须是唯一的-映射不能包含重复的键。

您不能这样做。1-它不起作用,2-对象知道引用它的变量名称是“层冲突”

此外,变量名也为程序员提供了方便。它们可以通过程序员的选择进行更改,甚至可以通过缩小器或模糊器等自动更改

因此,如果名称真的很重要,那么它要么需要成为对象本身的属性(根据@Paulo的回答,在构造函数中传递),要么需要维护一个将“人类可读名称”映射到各个对象的“哈希”(也称为“映射”):

var map_obj = { pear: new foo() };
然后,您可以迭代该映射的键(
Object.keys(map\u obj)
),按名称查找每个对象。但是在这种情况下,每个名称都必须是唯一的-映射不能包含重复的键。

因为

array_obj[i].name == pear.name == (new foo()).name
这取决于从
foo()
函数返回的内容。我怀疑它将返回
undefined
,因为您没有在
foo()

您可以使用@Paulo solution

您不能,因为

array_obj[i].name == pear.name == (new foo()).name
这取决于从
foo()
函数返回的内容。我怀疑它将返回
undefined
,因为您没有在
foo()


你可以使用@ Paulo解决方案

考虑下面的有效JS代码:“代码> Paule= Apple = NeXFoE())/>代码>您可能会混淆这是新的ES6功能。请考虑下面的有效JS代码:<代码> Paa= Apple=NeXFoE()
您可能会混淆这是新的ES6功能。我要去掉
var pear
(或者至少更改名称)-它将变量的命名与对象的
.name
属性混为一谈。好吧,每个人都说我不能这样做。所以我必须使用保罗的解决方案。谢谢大家。我要去掉
var-pear
(或者至少更改名称)-它将变量的命名与对象的
.name
属性混为一谈。好吧,大家都说我不能这样做。所以我必须使用保罗的解决方案。谢谢大家。