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]() の定義終了。
});
};