createAssigner() | Underscore JS 日本語リファレンス

_.extend(), _.extendOwn(), _.defaults() から呼ばれる内部関数。 createAssigner()からは部分適用した関数が返ってくる。

■内部構造

// _.defaults = createAssigner(_.allKeys, true);
 var createAssigner = function(keysFunc, undefinedOnly) {
// createAssignerから返される部分適用した関数。
    return function(obj) {

// 返される関数の引数の長さ。	
      var length = arguments.length;

// 引数の長さが2未満か引数が null だった場合。      
      if (length < 2 || obj == null) return obj;
      
// 返される関数の引数が2つ以上の時の処理。 
      for (var index = 1; index < length; index++) {

// 第2引数から 
        var source = arguments[index],
        
// keysFunc は _.keys() か _.allKeys() どちらか。
// 第2引数以降の引数のkey値の配列作成。 
            keys = keysFunc(source),
            l = keys.length;
            
// 第2引数「Object」のkey値とその値を第1引数「Object」にコピーするループ。     
        for (var i = 0; i < l; i++) {
          var key = keys[i];
          
// _.defaults = createAssigner(_.allKeys, true);、_.extend(),_.extendOwn() はこのif文は必ず実行される。
          if (!undefinedOnly || obj[key] === void 0) obj[key] = source[key];
        }
      }
// コピーされた第1引数を返す。
      return obj;
    };
  };

このページのトップへ戻る