1. ホーム
  2. ジャバスクリプト

[解決済み】JavaScriptの関数名を文字列で指定して実行する方法

2022-03-23 11:50:28

質問

JavaScriptで関数名を文字列として持っています。それを関数ポインタに変換して、後で呼び出せるようにするにはどうしたらよいでしょうか?

場合によっては、メソッドにいろいろな引数を渡す必要があるかもしれないね。

関数の中には、以下のような形式をとるものもあります。 namespace.namespace.function(args[...]) .

解決方法は?

を使用しないでください。 eval を使用しない限り 絶対に、絶対に 他に選択肢はありません。

言われているように、このようなものを使うのが一番良い方法でしょう。

window["functionName"](arguments);

しかし、これは名前空間が設定された関数では動作しません。

window["My.Namespace.functionName"](arguments); // fail

こんな感じでしょうか。

window["My"]["Namespace"]["functionName"](arguments); // succeeds

それを簡単にし、柔軟性を持たせるために、ここに便利な関数を紹介します。

function executeFunctionByName(functionName, context /*, args */) {
  var args = Array.prototype.slice.call(arguments, 2);
  var namespaces = functionName.split(".");
  var func = namespaces.pop();
  for(var i = 0; i < namespaces.length; i++) {
    context = context[namespaces[i]];
  }
  return context[func].apply(context, args);
}

このように呼び出すことになります。

executeFunctionByName("My.Namespace.functionName", window, arguments);

注意:好きなコンテキストを渡すことができるので、これは上記と同じことをすることになります。

executeFunctionByName("Namespace.functionName", My, arguments);