2013-10-15 42 views
0

我在其中我對象的名稱將是動態的情況..如何在JavaScript中調用一個動態命名的對象及其方法?

txtGrantAccess_5.GetValue(); 

,我想知道我怎麼能動態調用嗎?

例如

var abcd = 'txtGrantAccess_5'; 
abcd.GetValue(); 

請注意,txtGrantAccess_5已經存在,請你也可以避免在你的答案中使用eval嗎?我試圖理解幾乎與此類似的其他問題,但它們是不一樣的東西......

+0

你的意思是你將有一個你不知道的名字的全局變量? – promanski

+0

如果您不知道函數的存儲位置,那麼'eval'是唯一的選項。 – iConnor

+0

你會如何知道這個動態命名變量的名字? – Musa

回答

0

試試這個片斷

var abcd = 'txtGrantAccess_5'; 
this[abcd].GetValue(); 

但要小心的價值「這個」。如果它在瀏覽器中,也許這將有助於

var abcd = 'txtGrantAccess_5'; 
window[abcd].GetValue(); 
+0

作品像魅力謝謝!這會與所有瀏覽器兼容嗎?我正在談論「this」的解決方案 – inN0Cent

+0

@ inN0Cent JavaScript中的「this」問題在於它與大多數其他語言中的「this」關鍵字不同。請谷歌爲此:) – promanski

+0

請注意,這_only_在全球範圍內的作品。 –

0

如何:

var container = {}; 
var name = 'dynamicName'; 
container[name] = new MyObject(); 
container[name].getValue() 
+0

以上的評論問題是,它不是一個新的對象..其現有的對象txtGrantAccess_5已經存在,由服務器端編程動態創建.. – inN0Cent

+0

那麼使用eval有什麼問題呢? – Kong

2

您不能動態獲取本地變量。但是,如果它是對象的屬性,則可以使用[]語法獲得它。

var obj = {}; 
obj.foo = function() {}; 
obj.foo(); 
obj['foo'](); // same as above. 

但是在這種情況下,根本不能動態獲取局部變量。

var fn = function() { 
    var foo = '123'; 
    // no way to get foo dynamically. 
} 

一個例外是全局變量。在全球範圍內,局部變量創建爲window對象的屬性:

// global scope, outside of any function. 
var foo = function() {}; 
window.foo(); 
window['foo'](); // same as above 

只要記住,大量的全局變量通常是令人難以接受的,espcially是否有足夠的,你需要動態地找到這樣。您可能只想要一個容器對象來保存這些值,就像我發佈的第一個示例一樣。

+0

** - 1 **,您可以動態獲取局部變量,僅僅因爲人們不喜歡eval並不意味着您無法使用它。 – iConnor

+1

@Connor OP實際上說'避免使用eval'在後 – Musa

+0

@Musa我知道,這個問題沒有提及eval,但確實說不可能動態獲取局部變量。 – iConnor

相關問題