这里就是我想:在类中获取一个类的实例的名称
var Validator = function() {
this.do = function() {
alert(INTANCENAME); /// SHOULD BE 'FOO'
}
}
var FOO = new Validator().do();
是否possibe在Javascript执行?
这里就是我想:在类中获取一个类的实例的名称
var Validator = function() {
this.do = function() {
alert(INTANCENAME); /// SHOULD BE 'FOO'
}
}
var FOO = new Validator().do();
是否possibe在Javascript执行?
事实是没有这样做的时候,我也很难想到的唯一办法是进行循环,全部window
或范围的对象和检查某种平等与当前对象,像
this.do = function() {
for(var key in window) {
if(this === window[key]) {
alert(key);
}
}
};
为了在分配之后进行调用。
var FOO = new Validator();
FOO.do();
,可以拿出另一个问题是,一个实例(参照)可以存储在各种变量,所以也许不会得到你所期望的。
这工作,这里有一个替代,但类似的解决方案http://stackoverflow.com/questions/2462199/javascript-list-global-variables-in-ie/2462341#2462341 –
没有办法直接做你在这里要求的东西。对象本身并不是由它们的匹配变量名定义的 - 实际上,可能存在不直接分配给变量的对象,并将多个变量分配给同一对象。
JavaScript解释器使用我们的变量名作为标识符来帮助代码执行,但一旦运行,变量名对运行的JavaScript程序没有什么区别,因为它可能在执行时被缩减为内存引用,与您编写的原始代码完全分离。
编辑:回答yannis确实有点模拟这个,但它依赖于在特定范围内可用的变量 - 我的观点是没有直接的方式来从对象本身做到这一点,根据你的例子这个问题。
字面回答你的问题是:
(new Error()).stack
获得上线,并在do()
方法被调用的功能的信息。我不建议这样做。
你为什么需要它? – zerkms
那不是首先击败了物体的对象吗? – BenM
我不认为'FOO'是实例的名称,而不是实例当前存储的变量的名称。 –