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

Underscore JSに引数「Object」に含まれるメソッドを全て追加。

■使用例

_.mixin({
// 新規メソッド「capitalize」を定義。
  capitalize: function(string) {
    return string.charAt(0).toUpperCase() + string.toLowerCase();
  }
});
// re = "Kkokia";
var re = _("KOKIA").capitalize();
// re2 = "Kkokia";
var re2 = _.capitalize("KOKIA");

■内部構造

// _.mixin() の内部で最後に呼ばれる関数。
var result = function(instance, obj) {

// 「instance._chain」が ture の時、_内にラップしてインスタンスを返す。
    return instance._chain ? _(obj).chain() : obj;
};
  
_.mixin = function(obj) {

// 引数「obj」の全メソッド名の配列に_.each()でUnderscore内部にメソッドを追加する関数を適用。 
    _.each(_.functions(obj), function(name) {
    	
// 受け取ったメソッドを_[メソッド名]として追加。
      var func = _[name] = obj[name];
      
      _.prototype[name] = function() {
      	
// args は_() 時の引数。
        var args = [this._wrapped];

// arguments は上の例だと_.capitalize()の引数。
        push.apply(args, arguments);

// _.prototype[name]() を実行した時は result() 関数を適用して返す。
        return result(this, func.apply(_, args));
      };
// _.prototype[name]() の定義終了。
    });

};

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