[解決済み] 動的な関数に動的な数のパラメータを呼び出す【重複
2022-04-28 04:40:20
質問
これに関するトリックを探しています。私は、JavaScriptで特定のパラメータを渡して、動的な任意の関数を呼び出す方法を知っています、このような。
function mainfunc(func, par1, par2){
window[func](par1, par2);
}
function calledfunc(par1, par2){
// Do stuff here
}
mainfunc('calledfunc', 'hello', 'bye');
を使って、オプションで無制限のパラメータを渡す方法は知っています。
arguments
の中にあるコレクションを使用します。
mainfunc
に任意の数のパラメータを送信する方法がわかりません。
mainfunc
に送信されます。
calledfunc
このようなことを、任意の数のオプション引数で実現するには、どうすればよいでしょうか(あの醜い
if
-
else
)?
function mainfunc(func){
if(arguments.length == 3)
window[func](arguments[1], arguments[2]);
else if(arguments.length == 4)
window[func](arguments[1], arguments[2], arguments[3]);
else if(arguments.length == 5)
window[func](arguments[1], arguments[2], arguments[3], arguments[4]);
}
function calledfunc1(par1, par2){
// Do stuff here
}
function calledfunc2(par1, par2, par3){
// Do stuff here
}
mainfunc('calledfunc1', 'hello', 'bye');
mainfunc('calledfunc2', 'hello', 'bye', 'goodbye');
解決方法は?
関数のapplyメソッドを使用する。
function mainfunc (func){
window[func].apply(null, Array.prototype.slice.call(arguments, 1));
}
編集 : ふと思ったのですが、これって少し手を加えるともっと便利になりますよね:-)
function mainfunc (func){
this[func].apply(this, Array.prototype.slice.call(arguments, 1));
}
これは、ブラウザの外でも動作します(
this
はグローバル空間をデフォルトとします)。mainfuncのcallの使用もうまくいくでしょう。
function target(a) {
alert(a)
}
var o = {
suffix: " World",
target: function(s) { alert(s + this.suffix); }
};
mainfunc("target", "Hello");
mainfunc.call(o, "target", "Hello");
関連
-
[解決済み】JavaScriptエラー(Uncaught SyntaxError: Unexpected end of input)
-
[解決済み] jQueryでチェックボックスに "checked "を設定する
-
[解決済み] JavaScriptで現在のURLを取得する?
-
[解決済み] jQueryの「exists」関数はありますか?
-
[解決済み] JavaScriptでカンマを桁区切りにして数値を表示する方法
-
[解決済み] JavaScriptで2つの数値の間の乱数を生成する
-
[解決済み] Array.forEachでbreakを呼び出すようなショートサーキット
-
[解決済み] Bash関数にパラメータを渡す
-
[解決済み】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 実装 サイバーパンク風ボタン
おすすめ
-
JavaScriptにおけるマクロタスクとミクロタスクの詳細
-
vueにおけるv-forループオブジェクトのプロパティ
-
Vueの「データを聴く」原則を解説
-
[解決済み】ExpressJS : res.redirect()が期待通りに動かない?
-
nodejs unhandledPromiseRejectionWarning メッセージ
-
JavaScriptのStringに関する共通メソッド
-
nullのプロパティinnerHTMLを読み取れません エラーメッセージ
-
[解決済み] JavaScriptで関数のパラメータとして配列を渡す
-
[解決済み】別のjavascript関数に引数を渡す場合
-
[解決済み】配列を関数の引数リストに変換する【重複あり