【问题标题】:Getting the name of a defined object with a constructor使用构造函数获取已定义对象的名称
【发布时间】:2019-05-17 09:32:04
【问题描述】:

我正在尝试获取一个对象的名称并在定义后将其放入一个数组中,我尝试执行此代码,但名称最终为 undefined 有什么帮助吗?

function command(category, help, callback) {
  this.category = category;
  this.help = help;
  this.do = callback;

  cmndlist[category].push(this.name);
}; 

【问题讨论】:

  • “对象名称”是什么意思,该对象中有nameattribute 吗?
  • 您要获取哪个对象的名称?
  • 假设,例如我定义了一个名为“foo”的对象,我试图让它将“foo”添加到数组中。
  • 想要这样做通常表明您正在错误地思考事情。指向对象的变量不是对象的名称(多个变量可以指向同一个对象)。您通常会将对象本身推送到数组中——它不会推送对象的副本,而是对对象的引用)。也许如果你解释为什么你需要这个,有人会提供更好的前进方式。

标签: javascript object constructor


【解决方案1】:

对象没有名称或name 属性(除非您自己添加)。如果您指的是引用该对象的变量名,则无法访问。

【讨论】:

  • 在缩小代码的世界中,这可能是最好的。如果您的代码依赖于某些变量名,那么缩小很可能会导致代码中的错误。
【解决方案2】:

假设您创建了一个名为“foo”的对象:

var foo = new command("category", "help", "callback");

如果要将foo添加到数组cmndlist[category]中,只需要使用this即可:

cmndlist[category].push(this.objectName);

它会起作用的!

【讨论】:

  • 好吧,我不想把整个函数放在一个数组中,我只想要它的名字。
  • this.objectName 属性从何而来?
  • @MarkMeyer 来自本题第二行代码stackoverflow.com/questions/10314338/…window.alert 语句后面的注释,实际语句也是。
  • @JackBashford 问题是询问如何获取对象的名称,这表明他们示例中的代码不起作用(而且它不起作用)。除非您在对象上放置 objectName 属性,否则它是未定义的。
猜你喜欢
  • 1970-01-01
  • 2018-02-23
  • 2012-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-13
  • 1970-01-01
相关资源
最近更新 更多