【问题标题】:Javascript : how to get the name of the instance?Javascript:如何获取实例的名称?
【发布时间】:2015-11-27 15:04:53
【问题描述】:

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

foo = function()
{
...
}

然后我从 foo 类创建一个名为 pear 的对象:

pear = new foo();

然后我将梨对象放入数组中:

array_obj = [pear];

所以当我通过“for循环”解析array_obj时,我想获取实例的名称,即“pear”字符串:

for(var i = 0; i < array_obj.length; i++)
{
    console.log(array_obj[i].name);
} 

但它不起作用,因为array_obj[i].name 不返回“梨”名称。

你有想法吗?提前谢谢你,诚挚的。

【问题讨论】:

  • 暂时考虑以下有效的 JS 代码:pear = apple = new foo()
  • 你可能会混淆 function.name 这是新的 ES6 功能。

标签: javascript object instance


【解决方案1】:

改变你的功能:

foo = function(name)
{
   this.name = name;
}

你的电话:

var pear = new foo("pear");

【讨论】:

  • 我会去掉 var pear(或至少更改名称)——它将变量的命名与对象的 .name 属性混为一谈。
  • 好的,大家都说我做不到。所以我必须使用 Paulo 解决方案。谢谢大家。
【解决方案2】:

你不能这样做。 1 - 它不起作用,2 - 对象知道任何关于引用它的变量的名称是“层违规”。

另外,变量名也方便程序员。它们可以通过程序员的选择进行更改,甚至可以通过压缩器或混淆器等自动更改。

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

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

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

【讨论】:

    【解决方案3】:

    你不能因为

    array_obj[i].name == pear.name == (new foo()).name
    

    这取决于你从foo() 函数返回什么。我怀疑它会返回undefined,因为您没有在foo() 中定义此类属性

    您可以使用@Paulo 解决方案

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-07-08
      • 2011-01-28
      • 2013-08-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多