第2引数をthisとした第1引数「関数」を返す。
■使用例
var func = function(greeting){
return greeting + " : " + this.name;
};
var obj = { name : "moe" };
var txt = "hi";
var re = _.bind( func, obj );
// re = "hi : moe";
re( txt );
■内部構造
_.bind = function(func, context) {
// Undescore JS 内で nativeBind = FuncProto.bind が宣言されている。
// nativeBind が宣言されていて第1引数が nativeBind を継承している時,
// func.bind( slice.call(arguments, 1) ); が返される。
if (nativeBind && func.bind === nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
// 第1引数「func」が関数じゃない時、エラーが投げられる。
if (!_.isFunction(func)) throw new TypeError("Bind must be called on a function");
// 第3引数以降のarguments
var args = slice.call(arguments, 2);
var bound = function() {
// 第1引数の関数が nativeBind を継承していない時はexecuteBound()に代入され返される。
// this = _;
// args.concat( slice.call(arguments) ) は args の配列に arguments の配列を継ぎ足す。
// arguments は配列ではないので Array.concat() だと arguments object のまま継ぎ足される。
// CMS tools のバグのため書き方変えています。
var args2 = func;
var args3 = bound;
var args4 = context;
var args5 = this;
var args6 = args.concat(slice.call(arguments));
return executeBound( args2〜6 );
};
return bound;
};