javascript获取父对象/变量的名称

时间:2012-05-31 17:02:30

标签: javascript object

让我说我有

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`运行,我不想让对象名硬编码

4 个答案:

答案 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 

How to get class object's name as a string in Javascript?

答案 3 :(得分:1)

简而言之,没有。

您创建对象的方式,myObject只不过是一个与对象文字具有(相对宽松)关联的标签。在Java或C ++术语中,myObject更像是指针,而不是类名。如果要在标签myObject和它引用的对象之间建立更强的链接,则需要使用构造函数或子类模式。请参阅golimojo.com上的this article以获得非常可靠的概述。