获取类中实例的名称

时间:2014-01-12 09:18:16

标签: javascript oop

这就是我想要的:

var Validator = function () {
   this.do = function () {
      alert(INTANCENAME); /// SHOULD BE 'FOO'
   }
}
var FOO = new Validator().do();

是否可以在Javascript中实现?

3 个答案:

答案 0 :(得分:2)

事实是没有必要这样做,我唯一想到的方法是循环所有window或范围对象并检查当前对象的某种相等性,如

this.do = function () {
    for(var key in window) {
        if(this === window[key]) {
           alert(key);
        }
    }
};

为了工作,请在分配后调用它。

var FOO = new Validator();
FOO.do();

可能出现的另一个问题是实例(引用)可以存储在各种变量中,因此可能无法达到预期效果。

答案 1 :(得分:1)

没有办法直接做你在这里要求的东西。对象本身不是由匹配的变量名定义的 - 事实上,可能存在未直接分配给变量的对象,以及分配给同一对象的多个变量。

javascript解释器使用我们的变量名作为标识符来帮助执行代码,但是一旦它运行,变量名对运行的javascript程序没有影响,因为它可能在执行时被缩减为内存引用,与您编写的原始代码完全分开。

编辑:yannis的答案确实模拟了这一点,但它依赖于处理特定范围内可用的变量 - 我认为没有直接的方法可以在对象本身内执行此操作,如您在问题

答案 2 :(得分:1)

你问题的字面答案是:

  1. 使用(new Error()).stack获取有关调用do()方法的行和函数的信息。
  2. 使用JS解析器(例如Esprima)找出它被调用的变量(如果有的话,可以将方法本身分配给变量)。
  3. 我不建议这样做。