让我说我有
var myObject = {
'myFunction' : function () {
// something here that lets me get 'myObject'
}
}
我已经尝试过这里发现的各种功能和this.constructor.name
这样的东西,但我总是得到'对象'作为返回的值。在这种情况下,有没有办法得到变量的实际名称?
编辑解释为什么所以也许人们会更好地理解...我希望能够创建一个用setInterval连续调用的函数。像这样:
var myObject = {
'intval' : '',
'timeout' : 500,
'start' : function () {
this.objectName = 'myObject'; // <--I want this to be dynamically popped
this.intval=window.setInterval("window['"+this.objectName+"'].myFunction()",this.timeout);
},
'stop' : function () {
window.clearInterval(this.intval);
this.intval='';
},
'myFunction' : function () {
// do something
}
}
如果我硬编码myObject&#39; to this.objectName但我不希望它被硬编码。问题是我不能setInterval("window[this.objectName]",100) because
这个is not in the right context when
setInterval`运行,我不想让对象名硬编码
答案 0 :(得分:5)
不,你不能用JavaScript做到这一点。
答案 1 :(得分:3)
单向;
var myObject = {
'myFunction' : function () {
for (var name in window) {
if (window[name] === this) {
alert(name);
break;
}
}
}
}
不是很好的IMO,如果你将它包装在你自己的命名空间中会稍微好一些。
您也可以随时
var myObject = {
moniker: "myObject",
...
根据您的更新,您根本不需要解析该对象;
var myObject = {
'intval' : '',
'timeout' : 1500,
'start' : function () {
var self = this;
this.intval = window.setInterval(function() {
self.myFunction()
}, this.timeout);
},
'myFunction' : function() {
alert(this.intval);
}
}
答案 2 :(得分:1)
for (var name in this.global)
if (this.global[name] == this)
return name
答案 3 :(得分:1)
简而言之,没有。
您创建对象的方式,myObject
只不过是一个与对象文字具有(相对宽松)关联的标签。在Java或C ++术语中,myObject
更像是指针,而不是类名。如果要在标签myObject
和它引用的对象之间建立更强的链接,则需要使用构造函数或子类模式。请参阅golimojo.com上的this article以获得非常可靠的概述。