javascript get name of parent object/variable

13,091

Solution 1

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);
    }
}

Solution 2

No, you can't do that in JavaScript.

Solution 3

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.

Solution 4

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?

Share:
13,091
slinkhi
Author by

slinkhi

Updated on June 22, 2022

Comments

  • slinkhi
    slinkhi almost 2 years

    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) becausethisis not in the right context whensetInterval` is run, and I don't want to have the objectname hardcoded