2015-09-26 101 views
0

我有像這樣的對象:調用使用字符串的方法

var x = { 
    "fx": function() {...} 
} 

我有對象(y = "x")和功能(z = "fx")的名稱和它們作爲字符串。

我知道我可以通過使用eval通過以下方法或類似的調用函數:

eval(y.z) 

不過,我想避免使用eval做到這一點。我知道apply原型方法接受一個函數並將其應用於一個對象,但是因爲該函數包含在對象中,所以不可能搜索函數引用。

我知道這個問題不是一個新問題,因此必須有一個解決方案,但我找不到它。任何幫助,將不勝感激。

+1

爲什麼要指定'Y = 「X」'?你可以使用'x [z]()','eval'不好,應該避免使用 – Tushar

+0

我只是用它來表示對象名稱是一個字符串;我沒有以任何方式或形式使用eval。 – Carey

回答

2

您可以使用

x[y]() 

調用函數具有可變

+0

這是正確的,謝謝。我想爲未來的讀者指出,可以通過使用'window [x]'獲得對象。 – Carey

+0

@Saikyr只有在全局範圍內定義對象 – nils

+0

這是正確的,你猜你必須從全局範圍鏈接引用到正確的範圍。 – Carey

0

就我的理解是,y和z是一些變量,你想利用這些調用Ÿ對象的Z法變量。

它可以通過各種方式完成。例如:

(function() { 
x = { 
    "fx": function() { 
     alert("Hey!"); 
    } 
} 
    y = "x"; 
    z = "fx"; 
    this[y][z](); 
}()); 

DemoFiddle