2011-08-08 6 views
1

コールバック関数をパラメータとして関数に渡していますが、これはWebアプリケーションのさまざまな部分で行っています。コールバック関数を渡すときにパラメータを設定できますか?

場合によっては、コールバックが少し異なって反応するようにしたいのですが、このコールバックにパラメータを何とか渡すことはできますか?

soemethod(callback); 
otherethod(callback); 

otherother(callback(a=1)); 

どのようにしてコールバックにa = 1を渡すことができますか?いいえ、あなたはできません

otherother(function() { 
    callback(1); // assuming the first parameter is called a 
}); 

答えて

4

単にあなたのパラメータ化関数の呼び出しに巻き付け、匿名関数を使用します。

しかし、あなたはこのような何かを行うことができますが:

他の人がすでに述べたように
soemethod(callback); 
    otherethod(callback); 

    otherother(callback, 1); 


function otherother(callback, defaultValue) { 
    var value = defaultValue; 

    // your logic here, ie. 
    if(someCondition) 
     value = 2; 

    callback(value); 
} 
0

0

は、Javascriptでそのようなデフォルトパラメータを渡すことはできません - あなたが別の関数を自分で作成する必要があります。

あなたはです。しかし、これらのクロージャを自動的に作成するには、非常にきちんとしたヘルパー関数を使用してください。私が一番好きなパターンの1つはpartial function applicationです。ここで、「デフォルト」のパラメータは一番左のパラメータです。

あなたはFunction.prototype.bind(それはまたthisパラメータを処理します - これは、同様のコールバックなどのメソッドを渡して許可することができます)を使用することができ、新たなブラウザを使用している場合は、同様に古いブラウザをサポートする必要がある場合

otherother(callback.bind(undefined, 1)); 
//sets the first parameter to 1 
//when the callback is called, the 2nd, 3rd, parameters are filled and so on 

を、 create your own部分的なアプリケーション機能(多くのJSフレームワークは何らかのソートを持っていますが、次の例はPrototypeから取られました)

Function.prototype.curry = function() { 
    var fn = this, args = Array.prototype.slice.call(arguments); 
    return function() { 
     return fn.apply(this, args.concat(
     Array.prototype.slice.call(arguments))); 
    }; 
    }; 
関連する問題