JavaScript中的bind
在jquery中,也有bind方法,其作用被选元素添加一个或多个事件处理程序,并规定事件发生时运行的函数。主要使用如下:
$("#test").bind("click", function() {
console.log("hello world!");
});
但是在原生js中,bind的用法有如下作用:
(1)改变上下文的this,bind和call还有apply一样,也有这个作用,bind函数定义为:
func.bind(thisArg [, arg1 [, arg2, …]]);其中func是待绑定函数,thisArg是改变的上下文对象,arg1、arg2是绑定的参数表,bind方法返回值是上下文为thisArg的func,通过下面例子可以理解bind的使用方法:
var some = {
name: 'sunshine',
func:function(){
console.log(this.name);
}
};
var foo = {
name:'foobar'
};
foo.func = some.func;
foo.func(); //输出foobar
foo.func1 = some.func.bind(some);
foo.func1(); //输出sunshine
func = some.func.bind(foo);
func(); //输出foobar
foo.func1使用了bind方法,将some作为this指针绑定到some.func,调用foo.func1()时,this指针为some,所以输出的结果为sunshine,其他的分析如上。
(2)使用bind绑定参数表
例如:
var person = {
name : 'sunshine',
says : function(act,obj){
console.log(this.name+' '+act+' '+obj);
}
};
person.says('hello','world'); //输出sunshine hello world
yf = person.says.bind(person,'loves');
yf('you'); //sunshine loves you
可以看到,yf将this指针绑定到了person,并将第一个参数绑定到loves,之后再调用yf时,只需传入第三个参数,这个特性可以用于创建一个函数的"捷径",之后我们可以通过这个"捷径"调用,以便在代码多处调用时省略重复输入相同的参数。
还有关于bind的一些讲解的,看到了张鑫旭空间里发表的,感觉很好玩,而且元芳在里面有很大的作用呢,哈哈,在此贴上链接。
http://www.zhangxinxu.com/wordpress/2012/10/ecmascript-es5-bind-array-slice-call-apply/
转载于:https://my.oschina.net/sunshinewyf/blog/633076