【问题标题】:Javascript Object Constructor get variable name that called constuctorJavascript Object Constructor获取调用构造函数的变量名
【发布时间】:2016-09-20 21:29:08
【问题描述】:

这可能是不可能的,但我还是需要问一下。

如果我有一个类似的构造函数:

function CS_Sidekick() {
   //do whatever
}
var foo = new CS_Sidekick();

从 CS_Sidekick 构造函数内部有没有办法找出调用构造函数的变量,在这种情况下我想得到 foo。

类似

function CS_Sidekick(){
   //return foo since that's the variable that called it
}

【问题讨论】:

  • 你提到返回 foo。我使用了带有参数的函数,向它添加一些属性,然后返回它。在那些情况下 foo 在你调用函数之前就存在,那么你使用foo = addNewProps(foo);
  • “变量”不会“调用”任何东西。这是一个调用,然后是对变量的赋值。如果后面还有其他东西,你想得到什么? (提示:不,这是不可能的)
  • 这是一个XY problem,您在其中想到了一个不可能的解决方案并且您正在询问这个问题,但您并没有告诉我们您想要解决的真正问题是什么解决,因此我们无法为实际问题提供有用的解决方案。

标签: javascript function object constructor


【解决方案1】:

从 CS_Sidekick 构造函数内部有没有办法弄清楚 调用构造函数的变量,在这种情况下我想得到 富。

不,没有。 CS_Sidekick() 构造函数不知道调用代码将如何处理生成的新实例。

您确实需要描述您实际尝试解决的问题,因为您的 cmets 在这里没有意义:

function CS_Sidekick(){
   //return foo since that's the variable that called it
}

当有这样的代码时:

var foo = new CS_Sidekick();

CS_Sidekick() 运行时foo 的值尚未设置,因此CS_Sidekick() 尝试返回foo 确实没有意义。 foo 还没有值。此外,调用者代码的重点:

var foo = new CS_Sidekick();

是为变量foo 分配一个CS_Sidekick() 的新实例。如果这不是调用者想要的,那么调用者需要将他们的代码更改为其他内容。

new CS_Sidekick(); 应该返回CS_Sidekick 对象的新实例。这是它应该做的。

附言

如果您希望CS_Sidekick() 构造函数了解它的调用者,那么您可以将其作为参数传递给构造函数。没有自动方法可以从构造函数中检索有关调用环境的信息。

【讨论】:

  • 我猜他的意思是他正在寻找的神奇东西应该返回字符串"foo"
  • @Bergi - 是的,也许吧。这是一个 XY 问题,OP 没有告诉我们当时试图解决的真正问题是什么。
  • +1 表示“传递参数”。
  • 大家好,感谢 cmets。这里有一些背景可能有助于澄清这个问题。我已经开发了几个模板供其他人在我的团队中使用。这些模板将创建功能,但我试图弄清楚它们如何相互交谈。例如,假设我创建了一个新的 CS_Sidekick 并将其分配给 var foo。然后从一个完全不同的模板中,我想找到所有已定义的 CS_Sidekicks。如果我知道开发人员将其命名为 var foo,那很好,但他们可以将其命名为任何他们想要的名称。这有帮助吗?
  • @MikeEllis - 如果你想描述你试图解决的实际模板问题,那么我建议你在一个新问题中这样做。
猜你喜欢
  • 2016-08-17
  • 1970-01-01
  • 2014-12-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
  • 2019-02-22
  • 2013-10-14
  • 1970-01-01
相关资源
最近更新 更多