如何在javascript中获取变量的名称?
可能重复:如何在javascript中获取变量的名称?,javascript,variables,Javascript,Variables,可能重复: 不知道该如何解释。我希望在对象本身中获得变量名的字符串值 例如: var MyObject = function(){ var that = this; that.alertMyName = function(){ var name_of_instance = that.__name__; alert(name_of_instance); //hoping to retreive a string containing 'var1'? } };
不知道该如何解释。我希望在对象本身中获得变量名的字符串值 例如:
var MyObject = function(){
var that = this;
that.alertMyName = function(){
var name_of_instance = that.__name__;
alert(name_of_instance); //hoping to retreive a string containing 'var1'?
}
};
var var1 = new MyObject();
var1.alertMyName();
如果你做了一个
用于(obj中的x){}
在javascript中的对象上,x保存对象属性/变量名的名称,我相信您可以通过这种方式获得所需的内容:)如果您执行
用于(obj中的x){}
在javascript中的对象上,x持有对象属性/变量名的名称,我相信您可以通过这种方式获得所需的:)不可能确定对象引用的任何变量的名称,无论如何在这个特定示例中都不可能。想象一下,有许多变量引用同一个对象的情况——在这种情况下,您希望返回什么?如果根本没有变量引用对象呢?(考虑表达式
newmyobject().alertMyName()
——该对象的名称应该是什么?)
如果要为对象命名,请使其显式:
var MyObject = function(name){
var that = this;
that.alertMyName = function(){
alert(name);
}
};
var var1 = new MyObject("var1");
var1.alertMyName();
不可能确定对象引用的任何变量的名称,无论如何在这个特定示例中都不可能。想象一下,有许多变量引用同一个对象的情况——在这种情况下,您希望返回什么?如果根本没有变量引用对象呢?(考虑表达式
newmyobject().alertMyName()
——该对象的名称应该是什么?)
如果要为对象命名,请使其显式:
var MyObject = function(name){
var that = this;
that.alertMyName = function(){
alert(name);
}
};
var var1 = new MyObject("var1");
var1.alertMyName();
哦,当然,这很容易(实际上是不可能的)。只需打印出代码,然后读取函数调用,然后写下变量名
代码变得稍微复杂一些,但在边缘情况下仍然可行。您必须解析调用函数的文档,该函数需要明确了解文档所在的位置。使用$.ajax
调用,您可以将整个调用脚本或页面加载到一个变量中,然后使用滑动窗口进行解析,直到找到使用变量名的函数调用。但是,您必须确保找到的函数调用与当前实例相关。哦,当然,这很容易(实际上是不可能的)。只需打印出代码,然后读取函数调用,然后写下变量名
代码变得稍微复杂一些,但在边缘情况下仍然可行。您必须解析调用函数的文档,该函数需要明确了解文档所在的位置。使用
$.ajax
调用,您可以将整个调用脚本或页面加载到一个变量中,然后使用滑动窗口进行解析,直到找到使用变量名的函数调用。但是,您必须确保找到的函数调用与当前实例相关。值得思考:给定此代码,实例的“名称”是什么<代码>var var1=新的MyObject();VarVar2=var1;var1.alertMyName();var2.alertMyName()代码>var1
和var2
都指向同一个对象。请注意,将逻辑绑定到变量名几乎总是一个糟糕的想法(我说几乎,但我还没有看到有效的用例)。在这个问题上有一个很好的讨论:值得思考的是:给定此代码,实例的“名称”是什么<代码>var var1=新的MyObject();VarVar2=var1;var1.alertMyName();var2.alertMyName()var1
和var2
都指向同一个对象。请注意,将逻辑绑定到变量名几乎总是一个糟糕的想法(我说几乎,但我还没有看到有效的用例)。在这个问题上有一个很好的讨论:不,你不能。这将枚举对象的属性,并且不包含引用对象的任何变量的名称。我明白了,你的观点,你上面的观点与我刚才的观点不同。您可以在每个实例上创建一个name属性,尽管这会解决它们的问题,就像在new MyObject(“name”)中一样。@Ryan它会重新定义它们的问题,但不能解决所述的问题:)足够公平。。。只是想帮忙:)不,你不能。这将枚举对象的属性,并且不包含引用对象的任何变量的名称。我明白了,你的观点,你上面的观点与我刚才的观点不同。您可以在每个实例上创建一个name属性,尽管这会解决它们的问题,就像在new MyObject(“name”)中一样。@Ryan它会重新定义它们的问题,但不能解决所述的问题:)足够公平。。。只是想帮忙:)