7

可以说我有

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' 硬编码到 this.objectName,这很好用,但我不希望它被硬编码。问题是我不只是这样做setInterval("window[this.objectName]",100) becausesetInterval`is not in the right context when运行,我不想让对象名硬编码

4

4 回答 4

5

不,你不能在 JavaScript 中做到这一点。

于 2012-05-31T17:12:39.840 回答
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);
    }
}
于 2012-05-31T17:21:31.347 回答
1
for (var name in this.global)
      if (this.global[name] == this) 
        return name 

如何在Javascript中将类对象的名称作为字符串获取?

于 2012-05-31T17:19:56.457 回答
1

简而言之,不。

您创建对象的方式myObject只不过是与对象文字(相对松散)从属关系的标签。在 Java 或 C++ 术语中,myObject它更像是一个指针而不是类名。如果您想在标签myObject和它引用的对象之间建立更牢固的联系,则需要使用构造函数或子类模式。请参阅golimojo.com 上的这篇文章以获得相当可靠的概述。

于 2012-05-31T17:37:09.220 回答