6

パラメータの数が不明なコールバックを呼び出すJavaScriptの方法はありますか?

たとえば、これが呼び出しメソッドである場合:

function invokeCallback(callback, params) {
    return callback.invoke(params);
}

これらがサンプルのコールバック メソッドである場合:

function action() {
    doSomeAction();
}

function greet(msg) {
    console.log(msg);
}

function nameage(name, age) {
    var msg = 'My name is ' + name + ' and my age is ' + age;
    console.log(msg);
}

そして、次のように簡単に呼び出すことができれば:

invokeCallback(action);
invokeCallback(greet, 'Hello!');
invokeCallback(nameage, 'Bob', 20);

それなら素晴らしいでしょう。

このようなことは可能ですか?

4

3 に答える 3

6

他の回答で既に述べたように、Function.prototype.applyFunction.prototype.callは、注目したい 2 つのメソッドです。それらは動作方法がわずかに異なります。apply は引数を単一の配列として受け取りますが、call はそれらを個別のパラメーターとして受け取ります。

この手法がどこで使用されているかを探求したい関連概念は、カリー化です。

あなたの例に関してはparams、関数定義から引数を削除し、コールバック関数自体である開始引数を削除することを検討する必要があります。

function invokeCallback(callback) {
    var params = Array.prototype.slice.call(arguments, 1);
    return callback.apply(this, params);
}
于 2013-11-14T13:47:11.090 に答える
2

callback.apply または callback.call

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/apply

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function/call

コールバックは次のようになります。

function invokeCallback(callback, params) {
    return callback.apply(this,params);
}
于 2013-11-14T13:38:26.047 に答える