[解決済み】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);
関連
-
[解決済み】Reactのeslintエラーはpropsの検証で見つからない
-
[解決済み】'useState' が定義されていない no-undef React
-
[解決済み] JavaScriptで文字列が部分文字列を含むかどうかを確認する方法は?
-
[解決済み] あるJavaScriptファイルを他のJavaScriptファイルにインクルードするにはどうすればよいですか?
-
[解決済み] JavaScriptでメールアドレスを検証するのに最適な方法は何ですか?
-
[解決済み] JavaScriptでタイムスタンプを取得する方法は?
-
[解決済み] JavaScriptで空文字列/未定義文字列/null文字列をチェックするにはどうすればよいですか?
-
[解決済み] JavaScriptで文字列をbooleanに変換するにはどうしたらいいですか?
-
[解決済み] jQueryでフォームデータをJavaScriptオブジェクトに変換する
-
[解決済み】JavaScriptで文字列の出現箇所をすべて置換する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】Uncaught TypeError: nullのプロパティ'value'を読み取ることができない
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】getElementByIdはnullを返す?[クローズド]
-
[解決済み】npm install --legacy-peer-deps は具体的に何をするのですか?どんなときに推奨されるのか/どんな使用例が考えられるのか?
-
[解決済み】JavaScriptで相対URLへのリダイレクトを行う
-
[解決済み】TypeError: AngularJSで未定義のプロパティ'get'を読み取れない
-
[解決済み] Uncaught (in promise) TypeError: フェッチに失敗してCorsエラー
-
[解決済み】中央値の計算 - javascript
-
[解決済み] StringをJavaScriptの関数呼び出しにする方法は?[重複している]をクリックします。
-
[解決済み] 変数に名前をつけたJavaScriptの関数を呼び出す【重複