2012-06-15 18 views
2

假設我給了一個字符串,並且我想定義一個名稱爲該字符串的函數。我怎樣才能做到這一點?如何定義一個名稱等於字符串的javascript函數

UPDATE:

我忘了提,我不想一個匿名函數設置爲一個屬性,因爲我也想從功能即內部動態搶函數的名稱。 arguments.callee.name

+1

如果你已經被賦予了名字,爲什麼你需要再次從'arguments.callee的獲得這個名字。 name'? –

+0

@JamesAllardice因爲我正在動態地重寫元素的原型的'removeChild' javascript方法 – user730569

+3

我並不完全清楚你想要達到的效果。您的問題中的一些代碼可能會有幫助但是請注意,不要忘記'arguments.callee'已被棄用,並在嚴格模式下引發語法錯誤。 –

回答

3

像這樣:

var functionName = "myfunction" 
window[functionName] = function() { 
    // your function here 
} 

根據不同的要求,也許像這樣的工作:

var myFunctionGenerator = function(name) {return function(message) { 
    alert("hi, this is a function named '" + name + "'. The parameter passed is '" + message + "'."); 
}} 

var myFunction = myFunctionGenerator('some function name'); 
myFunction('a parameter'); 
// hi, this is a function named 'some function name'. The parameter passed is 'a parameter'. 
+1

啊,我忘了提及我不想爲一個屬性設置一個匿名函數,因爲我也想從函數內部動態獲取函數的名字。 'arguments.callee.name' – user730569

+0

@ user730569請參閱我的更新。 – McGarnagle

+0

嗯,那可能工作,讓我試試吧 – user730569

1

如果你的聲明函數,使用eval()。只需鍵入您試圖執行例如參數的字符串表示:

eval("function name(){alert('a');}"); 

然後,您可以通過正常的慣例調用該方法,name();

如果您已經有函數名稱並想用字符串表示法調用該函數,則可以使用eval()方法,儘管它不總是最佳的性能。我們將看到這樣:

var fnName = "functionName"; 
var params = "param1"; 
var fnNameWithParams = "functionName("+params+")"; 
eval(fnNameWithParams); 

更好的方法可能是:

var fnName = "functionName"; 
var params = "param1"; 
var fnToCall = window[fnName]; 
fnToCall(params); 
+0

「它並不總是最佳的表現」......對於幾乎任何事情都不是最佳的。不幸的是,我不知道如果沒有它,OP能夠實現他們想要的任何方式(至少不是沒有更多的信息)。 –

相關問題