众所周知,改变this指向的一些方法包括call,apply还有bind方法,bing方法是ECMAscript5发布的,所以只能在ie9及以上浏览器支持,既然有了apply和call方法,那为何还要出bind方法呢?当然他有一些过人之处,下面听我慢慢道来:
1.bind方法能够保持参数个数:
例: function xxx(a,b,c){
return a+b+c;
}
调用bind方法
var a,b
a = xxx.bind(null,1) //bind方法第一个参数是改变这个this的指向,这里不需要改变this指向,所以我传入了一个null; 第二个及后面的参数则是对应传入xxx函数的参数;
console.log(a(2,3)) //result 6; 为什么会输出6呢? 而且我也只传了两个参数啊,xxx函数可是有三个形参呢?
解:
首先,你xxx.bind(null,1)并把结果赋给了a; 这就代表你已经把a函数的第一个参数传入了1,后面你再使用a函数时就只用传后面两个参数了,而且你可以继续给a标签再使用bind方法(b = a.bind(null,2))。 这个你再调用b函数的时候只用传一个参数了,以为a已经传了一个,赋值给b的时候又传入了一个,所以b调用时只用传一个了,这样的好处是对于参数的传递会方便很多;bind还有一个改变this的作用,但这个的用法和call函数的用法是一样的,这里就不用细讲了。。。
——Sincere