ECMAScript 5为Function新增bind原型方法,用来把函数绑定到指定对象上。在绑定函数中,this对象被解析为传入的对象。具体用法如下:
function.bind(thisArg[,arg1[,arg2[,argN]]])
参数说明:
- function:必需参数,一个函数对象。
- thisArg:必需参数,this可在新函数中引用的对象。
- arg1[,arg2[,argN]]]:可选参数,要传递到新函数的参数的列表。
bind方法将返回与function函数相同的新函数,thisArg对象和初始参数除外。
【示例1】下面示例定义原始函数check,用来检测传入的参数值是否在一个指定范围内,范围下限和上限根据当前实例对象的min和max属性决定。然后使用bind方法把check函数绑定到对象range身上。如果再次调用这个新绑定后的函数check1后,就可以根据该对象的属性min和max来确定调用函数时传入值是否在指定的范围内。
var check = function (value) {
if (typeof value !== 'number') return false;
else return value >= this.min && value <= this.max;
}
var range = { min : 10, max : 20 };
var check1 = check.bind(range);
var result = check1 (12);
console.log(result); //true
【示例2】下面示例在上面示例基础上,为obj对象定义了两个上下限属性,以及一个方法check。然后,直接调用obj对象的check方法,检测10是否在指定范围,则返回值为false,因为当前min和max值分别为50和100。接着,把obj.check方法绑定到range对象,则再次传入值10,则返回值为true,说明在指定范围,因为此时min和max值分别为10和20。
var obj = {
min: 50,
max: 100,
check: function (value) {
if (typeof value !== 'number')
return false;
else
return value >= this.min && value <= this.max;
}
}
var result = obj.check(10);
console.log(result); //false
var range = { min: 10, max: 20 };
var check1 = obj.check.bind(range);
var result = check1(10);
console.log(result); //true
【示例3】下面示例演示了如何利用bind方法为函数两次传递参数值,以便实现连续参数求值计算。
var func = function (val1, val2, val3, val4) {
console.log(val1 + " " + val2 + " " + val3 + " " + val4);
}
var obj = {};
var func1 = func.bind(obj, 12, "a");
func1("b", "c"); //12 a b c