bind()使用方法
bind方法,顧名思義,就是綁定的意思,到底是怎么綁定然后怎么用呢,下面就來(lái)說(shuō)說(shuō)我對(duì)這個(gè)方法的理解。
?
語(yǔ)法
fun.bind(this,arg1,arg2,...)
bind()方法會(huì)創(chuàng)建一個(gè)新的函數(shù),稱為綁定函數(shù),fun方法在this環(huán)境下調(diào)用
該方法可傳入兩個(gè)參數(shù),第一個(gè)參數(shù)作為this,第二個(gè)及以后的參數(shù)則作為函數(shù)的參數(shù)調(diào)用
?
實(shí)例?
1.創(chuàng)建綁定函數(shù)
1 this.a = 1;2 var module = {3 a : 2,4 getA:function() {5 return this.a; 6 }7 };8 module.getA();//29 10 var getA1 = module.getA; 11 // getA在外部調(diào)用,此時(shí)的this指向了全局對(duì)象 12 getA1();//1 13 14 // 再把getA1方法綁定到module環(huán)境上 15 var getA2 = getA1.bind(module); 16 getA2();從上面的例子可以看出,為什么要?jiǎng)?chuàng)建綁定函數(shù),就是當(dāng)我們調(diào)用某些函數(shù)的時(shí)候是要在特定環(huán)境下才能調(diào)用到,所以我們就要把函數(shù)放在特定環(huán)境下,就是使用bind把函數(shù)綁定到特定的所需的環(huán)境下。
?
?
2.讓函數(shù)擁有預(yù)設(shè)的參數(shù)
使用bind()方法使函數(shù)擁有預(yù)設(shè)的初始參數(shù),這些參數(shù)會(huì)排在最前面,傳給綁定函數(shù)的參數(shù)會(huì)跟在它們后面
1 function list(){2 // 讓類數(shù)組arguments擁有數(shù)組的方法slice,這個(gè)函數(shù)實(shí)現(xiàn)了簡(jiǎn)單把類數(shù)組轉(zhuǎn)換成數(shù)組3 return Array.prototype.slice.call(arguments);4 }5 6 list(1,2,3);//[1,2,3]7 8 //給list綁定一個(gè)預(yù)設(shè)參數(shù)4 9 var list1 = list.bind(undefined,4); 10 11 list1();//[4] 12 13 list1(1,2,3);//[4,1,2,3]3.setTimeout的使用
正常情況下,調(diào)用setTimeout的時(shí)候this會(huì)指向全局對(duì)象,但是使用類的方法時(shí)我們需要指向類的實(shí)例,所以要把this,綁定要回調(diào)函數(shù)方便繼續(xù)使用實(shí)例
function Fun1() { this.name = 1;} Fun1.prototype.fun2 = function() {window.setTimeout(this.fun3.bind(this), 1000);} Fun1.prototype.fun3 = function(){console.log('name:'+this.name);//name:1 } var fun = new Fun1(); fun.fun2();4.快捷方法--把類數(shù)組轉(zhuǎn)換成數(shù)組
第一種方法是使用apply方法
1 function fun1() { 2 var slice = Array.prototype.slice; 3 return slice.apply(arguments); 4 } 5 6 fun1(1,2,3);//[1,2,3]第二種方法是使用call方法和bind方法一起使用
function fun2() {var unboundSlice = Array.prototype.slice;// 把函數(shù)的call方法綁定在數(shù)組slice方法上,之后再給call方法傳遞參數(shù)var slice = Function.prototype.call.bind(unboundSlice);return slice(arguments); }fun2(1,2,3);//[1,2,3]?
總結(jié)
以上是生活随笔為你收集整理的bind()使用方法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 后疫情时代,打造15分钟交通圈
- 下一篇: mysql 启动出现系统错误193