这就是我想要的:
var Validator = function () {
this.do = function () {
alert(INTANCENAME); /// SHOULD BE 'FOO'
}
}
var FOO = new Validator().do();
是否可以在Javascript中实现?
答案 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)
你问题的字面答案是:
(new Error()).stack
获取有关调用do()
方法的行和函数的信息。我不建议这样做。