文字列が与えられ、その文字列の名前で関数を定義したいとします。これどうやってするの?
アップデート:
関数内から関数の名前を動的に取得したいので、匿名関数をプロパティに設定したくないことを忘れました。arguments.callee.name
文字列が与えられ、その文字列の名前で関数を定義したいとします。これどうやってするの?
アップデート:
関数内から関数の名前を動的に取得したいので、匿名関数をプロパティに設定したくないことを忘れました。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'.
関数を宣言する場合は、を使用します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);