2014-10-17 33 views
0

我可以爲函數創建動態名稱嗎?例如:使動態JavaScript函數

var name = 'test1'; 

function [name]() { ..... }; 

現在我可以調用test1();這個運行函數名{.....};但與[名]爲Test1,這意味着如果我改變

var name = 'test2'; 

我可以調用test2的()函數將運行作爲

function test1() { ..... }; 

;這個運行函數名{.....};但與[名]爲test2的,這意味着該函數將運行作爲

function test2() { ..... }; 

可以在做什麼?

+1

嘗試'window [name] = function(){...}' – 2014-10-17 02:29:43

+0

不,你不行。不是沒有類似eval的方法。但是,您可以定義一個函數並將其引用存儲在對象的動態命名屬性中。 – 2014-10-17 02:39:06

回答

0
var test1 = function() {...}; 
var test2 = test1; 

// now both of the following work 

test1(); 
test2(); 

如果您在Web瀏覽器中工作,你也可以將此功能在全局對象賦給一個字符串值,window。如這樣

var originalFunction = function() {....}; 
var newName = "foo"; 
window[newName] = originalFunction; 
// now both of the following work. 
foo(); 
originalFunction(); 
+0

爲什麼投票時沒有評論?代碼起作用,我相信這是OP要求的。 http://jsfiddle.net/4n1xowok/ – 2014-10-17 02:48:41

+0

謝謝大衛。我會嘗試的。 ;順便說一下,我不是那個壓倒它的人。 ) – user2062455 2014-10-17 02:57:43

+0

它更像是一個細微差別問題,'window [thename] = function(){}'與函數thename(){}'不同,因爲在一種情況下,您正在創建一個命名函數,而在其他您正在存儲對屬性中的匿名函數的引用。儘管如此,這種差異很可能並不重要。 – 2014-10-17 04:28:23