2012-05-31 35 views
4

可以說我有的JavaScript獲得父對象的名稱/可變

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) because這個is not in the right context when setInterval`運行,我不想讓對象名硬編碼

+0

您是否在尋找類似'this'的東西,這是一種引用該對象的方式? – helpermethod

+0

不,我不是在尋找一個對象引用,我正在尋找對象的實際名稱 – slinkhi

+0

對於編輯的問題:start:function(){ var that = this; this.intval = setInterval(function(){ that.myFunction(); },this.timeout); }, – jasssonpet

回答

3

的一種方式;

var myObject = { 
    'myFunction' : function() { 
     for (var name in window) { 
      if (window[name] === this) { 
       alert(name); 
       break; 
      } 
     } 
    } 
} 

不是很好的國際海事組織,稍微好一點,如果你把它包裝在你自己的命名空間。

你也可以隨時

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

是啊我以前只是設置一個屬性,就像你的第二個例子 – slinkhi

+0

上面更新,如果你的概率是'這個'的綁定,你不需要解析名字 –

+0

啊哈!你的第一個例子工作正常,但最後編輯你的是我正在尋找的,謝謝! – slinkhi

5

不,你不能在JavaScript中這樣做。

1

總之,不。

你創建對象的方式,myObject只不過是一個與對象字面相關(相對鬆散)的標籤。在Java或C++術語中,myObject更像是指針,然後是類名。如果你想在標籤myObject和它引用的對象之間建立一個更強大的鏈接,你需要使用一個構造函數或子類模式。在golimojo.com上查看this article以獲得非常可靠的概述。