Javascript:如何获取实例的名称?
我创建了一个名为foo的类: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 = 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
属性混为一谈。好吧,大家都说我不能这样做。所以我必须使用保罗的解决方案。谢谢大家。