2016-10-31 7 views
1

bind()を使用して、関数とパラメータをバインドできます。javascriptバインド機能を使用する場合のParamプレースホルダ

たとえば、outputTwo()には2つのパラメータが必要です。私はそれをパラメータでバインドします。それから、呼び出す際にパラメータを渡すだけです。次のようになります。

<script> 
function outputTwo(param1, param2) { 
    console.log(param1, param2); 
} 
var boundOutput = outputTwo.bind(null, "what"); // the first param should be an object, to replace <this> object in function, which not needed in our question 
boundOutput("the heck?"); 
</script> 

出力はWhat the heck?です。

質問です:は、私が最初のものを結合ずにoutputTwo()に2つ目のパラメータをバインドすることはできますか?

C++には、placeholdersと呼ばれるものがあります。

auto boundOutput = std::bind(outputTwo, std::placeholders_1, "the heck?"); 
boundOutput("what"); 

それは出力What the heck?ます:私はPARAM1を結合することなくPARAM2をバインドする必要があるとき、私はPARAM1にplaceholderを渡す必要がある、のように見えます。 JavaScriptのようなものがありますか?

EDIT: 私は、ブラウザの拡張機能を書いている、と私はバインドする必要がある機能は、ブラウザで私が書いたが、呼ばれています。だから私はパラメータのタイプを変更することができません。

+2

Downvoters:理由を説明してください?これは妥当な質問のようです。 – mplungjan

+0

実際、あなたの質問に間違いはありません。よく説明された。とにかく答えにバインドはちょうど左から右に行くでしょう。しかし、JSの優れた特徴の1つはオブジェクトリテラルです。これらを使用すると、より複雑なデフォルトパラメータを作成できます。 '{first:" one "}'と呼ばれ、呼び出し側から自己文書化コードを生成するという利点があります。 – Keith

答えて

1

することができますが、それはのように素敵ではないでしょう。

const bindLast = (fn, this, ...lastArgs) => 
    (...firstArgs) => fn.call(this, [...firstArgs, ...lastArgs]); 

あなたはそれの関数オブジェクトのメソッドにしたい場合は、私は一般的にそれをやって嫌いFunction.prototypeと似た何かを行うことができます。

使用法:

const outputFirst = bindLast(outputTwo, null, "world"); 
outputFirst("hello"); // "hello world" 
-1
/** www.lsauer.com 2011 
* http://www.lsauer.com/2011/08/javascript-using-placeholders-s-d-in.html 
*/ 
var r = (r||{ 
    t : "check", 
    m : "mate", 
    c: 10.10 
}); 
console.log('It is '+r.t+r.m+' for Player A. Game Stat:'+r.c); 

//By using placeholders, the same example statement can be written more clearly, as follows: 
console.log('It is %s%s for Player A. Game Stat: %d',r.t, r.m, r.c); 

出典:https://gist.github.com/lsauer/2850506

キースが言ったように、これは良くない場合と同等です。

関連する問題