今日は次のアンダースコアrestArgs機能と関数createAssignerを見ました
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
VaRの restArgs = 関数(FUNC、startIndexの) { == = startIndexのstartIndexのヌル func.length - ?1:+のstartIndex; リターン機能(
) { VARの長さ= 数学 .MAX(引数 .LENGTH - startIndexの、0)、 残り= 配列(長さ)、 インデックス= 0。用(;指数<長さ;インデックス++){ 残り[インデックス] = 引数 [索引+のstartIndex]。 } スイッチ(のstartIndex){ ケース0:リターン func.call(この、REST)。ケース1:戻り func.call(この、引数 [ 0 ]、REST)。
ケース 2:リターン func.call(この、引数 [ 0 ]、引数 [ 1 ]、REST)。 } VARの引数= 配列(のstartIndex + 1)。用(インデックス= 0、インデックス<startIndexの、インデックス++){ 引数[インデックス]は、= 引数 [インデックス]を、 } 引数[startIndexの] =休止; 返す func.apply(この、引数); }。 }。
|
createAssigner
この関数は、主に以下の三つの分野で使用されます。
1 2 3 4 5 6 7 8 9
|
_ .extend = createAssigner(_ .allKeys)。
_ .extendOwn = _ .ASSIGN = createAssigner(_ .keys)。_ .defaults = createAssigner(_、.allKeys 真)。
|
_.extend
機能拡張機能は、オブジェクトの属性を乾燥させるために使用され、_.extendOwn
オブジェクトの機能は、独自の属性を持っています。_.defaults
機能があり、同じキーならば、後者は以前に上書きしません、最初の値をとるためのキーは、キーとして、一度表示されます-値のペア。
また、大型の列は、 ソースを読み取るunderscore.js(2) > =パラメーターは、例を.extendするが、.extend(A、B、C)は、Bされ、二つcを受け入れることができる3つの方法へのキーオブジェクトをカバーします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
|
するvar createAssigner = 関数(keysFunc、デフォルト) { を返す関数(OBJ) { VARの長さ= 引数が .LENGTH; IF(デフォルト)OBJ = オブジェクト(OBJ)IF(長さ< 2 || OBJ == NULL)戻り OBJ。 のための(VARのインデックス= 1、インデックス<長さ;インデックス++){ VARのソース= 引数 [インデックス]、 、キー= keysFunc(ソース) L = keys.length; ための(VAR I = 0。私はLを<;私は++){ VARのキー=キー[I]は、
IF(デフォルト|| OBJ [キー] ===!空隙0、OBJ [キー] =出典[キー]) } } 戻り OBJ; }; };
|