假設我給了一個字符串,並且我想定義一個名稱爲該字符串的函數。我怎樣才能做到這一點?如何定義一個名稱等於字符串的javascript函數
UPDATE:
我忘了提,我不想一個匿名函數設置爲一個屬性,因爲我也想從功能即內部動態搶函數的名稱。 arguments.callee.name
假設我給了一個字符串,並且我想定義一個名稱爲該字符串的函數。我怎樣才能做到這一點?如何定義一個名稱等於字符串的javascript函數
UPDATE:
我忘了提,我不想一個匿名函數設置爲一個屬性,因爲我也想從功能即內部動態搶函數的名稱。 arguments.callee.name
像這樣:
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'.
啊,我忘了提及我不想爲一個屬性設置一個匿名函數,因爲我也想從函數內部動態獲取函數的名字。 'arguments.callee.name' – user730569
@ user730569請參閱我的更新。 – McGarnagle
嗯,那可能工作,讓我試試吧 – user730569
如果你的聲明函數,使用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);
「它並不總是最佳的表現」......對於幾乎任何事情都不是最佳的。不幸的是,我不知道如果沒有它,OP能夠實現他們想要的任何方式(至少不是沒有更多的信息)。 –
如果你已經被賦予了名字,爲什麼你需要再次從'arguments.callee的獲得這個名字。 name'? –
@JamesAllardice因爲我正在動態地重寫元素的原型的'removeChild' javascript方法 – user730569
我並不完全清楚你想要達到的效果。您的問題中的一些代碼可能會有幫助但是請注意,不要忘記'arguments.callee'已被棄用,並在嚴格模式下引發語法錯誤。 –