【问题标题】:javascript get name of parent object/variable [duplicate]javascript获取父对象/变量的名称[重复]
【发布时间】:2012-05-31 17:02:30
【问题描述】:

假设我有

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) becausethisis not in the right context whensetInterval`,而且我不想将对象名硬编码

【问题讨论】:

  • 您是否正在寻找类似this 的东西,这是一种引用对象的方式?
  • 不,我不是在寻找对象引用,我在寻找对象的实际名称
  • 对于已编辑的问题: start: function () { var that = this; this.intval = setInterval(function () { that.myFunction(); }, this.timeout); },

标签: javascript object


【解决方案1】:

不,你不能在 JavaScript 中这样做。

【讨论】:

    【解决方案2】:

    一种方式;

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

    【讨论】:

    • 是的,我之前只是像你的第二个例子一样设置一个属性
    • 以上更新,如果您的问题是this 的绑定,则无需解析名称
    • 啊哈!您的第一个示例运行良好,但您的最后一次编辑正是我想要的,谢谢!
    【解决方案3】:
    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?

    【讨论】:

      【解决方案4】:

      简而言之,不。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-28
        • 2017-12-16
        • 2012-12-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多