Lets say I have
var myObject = {
'myFunction' : function () {
// something here that lets me get 'myObject'
}
}
I have tried various functions found here and stuff like this.constructor.name
but i always get 'Object' as the value returned. Is there any way to get the actual name of the variable in this situation?
edit to explain the why so maybe people will better understand...I want to be able to make a function that is continuously called with setInterval. Something like this:
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
}
}
This works just fine if i hardcode 'myObject' to this.objectName but I don't want it to be hardcoded. Problem is that I wan't just do setInterval("window[this.objectName]",100) because
thisis not in the right context when
setInterval` is run, and I don't want to have the objectname hardcoded
No, you can't do that in JavaScript.
One way;
var myObject = {
'myFunction' : function () {
for (var name in window) {
if (window[name] === this) {
alert(name);
break;
}
}
}
}
Not very nice IMO, marginally better if you wrap it in your own namespace.
You could also always
var myObject = {
moniker: "myObject",
...
In light of your update you don't need to resolve the object at all;
var myObject = {
'intval' : '',
'timeout' : 1500,
'start' : function () {
var self = this;
this.intval = window.setInterval(function() {
self.myFunction()
}, this.timeout);
},
'myFunction' : function() {
alert(this.intval);
}
}
for (var name in this.global)
if (this.global[name] == this)
return name
How to get class object's name as a string in Javascript?
In short, nope.
The way you're creating your objects, myObject
is nothing more than a label with a (relatively loose) affiliation with an object literal. In Java or C++ terms, myObject
is more like a pointer then a class name. If you want a stronger link between the label myObject
and the object it references, you'll need to use a constructor or subclass pattern. See this article on golimojo.com for a pretty solid overview.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With