_.chain() 関数自体は Undescore インスタンスを新規作成、引数をラップしたインスタンスを返す。各メソッドを数珠繋ぎにした場合はメソッドを適用した結果を次のメソッドに渡して連続的にメソッドを実行する。
■使用例
var arr = [
{ works : "Psyclopedia", author : "PSY・S [saiz]" },
{ works : "ファジイな痛み", author : "PSY・S [saiz]" },
{ works : "遠い空", author : "PSY・S [saiz]" },
{ works : "Parashute Limit", author : "PSY・S [saiz]" },
{ works : "Angel Night 天使のいる場所", author : "PSY・S [saiz]" }
];
// re = Angel Night 天使のいる場所 : PSY・S [saiz]
var re = _.chain( arr )
.sortBy("works")
.map( function( artist ) { return artist.works + " : " + artist.author; } )
.first()
.value();
var arr = [
{ works : "Psyclopedia", author : "PSY・S [saiz]" }
];
// re は Undescore のインスタンスで re._wrapped に _() での引数を持っている。
var re = _.chain( arr );
// [{"works":"Psyclopedia","author":"PSY・S [saiz]"}];
console.log( re._wrapped );
// true
console.log( re._chain );
■内部構造
_.chain = function(obj) {
// _ のインスタンス( instance )を作成。_chain を true にして instance を返す。
var instance = _(obj);
instance._chain = true;
return instance;
};
// Undersocre JS内部で以下が宣言されている。
var _ = function(obj) {
if (obj instanceof _) return obj;
if (!(this instanceof _)) return new _(obj);
this._wrapped = obj;
};