2013-06-12 93 views
2
var func = function(){}; 
var funcName = "func"; 
funcName.call(); 

我很期待功能我可以將字符串標識符作爲函數嗎?

+2

如果是在窗口範圍,你可以做'窗口[了funcName()'。 – elclanrs

+2

如果你附加它來說窗口,例如,你可以說'window.func = function(){};'然後'窗口['func']();'但我不會推薦它。你試圖解決的實際問題是什麼? – asawyer

回答

1

您可以用方括號使用對象的屬性名稱字符串標識符的一些有用的功能:

obj['identifier'] === obj.identifier 

然而,唯一的情境中,你可以作爲對象屬性的訪問變量用於全局變量,因爲它們作爲全局屬性(瀏覽器中的窗口)添加爲對象:

var global = this; 
var name = 'fred'; 
alert(global['name']); // fred 

您不能訪問任何其他執行上下文的變量對象,但你可以使用EVAL評估字符串:

alert(eval('name')) 

但強烈建議反對。使用對象屬性而不是方括號表示法。

0

如果您正在考慮使用用戶輸入來選擇要應用的函數,某些用戶可能會發現該函數(*)的使用方式令人厭惡,並且將函數指定爲哈希值可能更安全如下:

(*)再次,訪客可以隨意編輯他們收到的JavaScript網站的副本,所以這可能是沒有實際意義的。

function rotate(){ 
rotate an image; 
} 

function resize(){ 
resize an image; 
} 

operations = { 'rotate': rotate, 'resize': resize }; 
... 
try { 
(operations[userChoice])(); 
} catch(e){ console.log(e); } // or maybe tell the user there is no such function 

請注意,如何使用操作對象限制了userChoice可以調用的內容。

0

我知道這不完全是你問的,但在某些情況下它可能是更好的選擇。

除了使用函數的名稱作爲字符串外,還可以直接處理對函數本身的引用。

這將是這樣的:

function func() {    // normal function definition 
} 
var func2 = function() {}; // anonymous function 

var function_to_use = func; // works with normal functions 
function_to_use(); 

function_to_use = func2;  // as well as anonymous ones 
function_to_use(); 
相關問題