## bind()
bind方法和call、apply方法有些不同,但是不管怎么說它們都可以用來改變this的指向。
先來說說它們的不同吧。
```
var a = {
user:"追夢子",
fn:function(){
console.log(this.user);
}
}
var b = a.fn;
b.bind(a);
```
我們發現代碼沒有被打印,對,這就是bind和call、apply方法的不同,實際上bind方法返回的是一個修改過后的函數。
```
var a = {
user:"追夢子",
fn:function(){
console.log(this.user);
}
}
var b = a.fn;
var c = b.bind(a);
console.log(c); //function() { [native code] }
```
那么我們現在執行一下函數c看看,能不能打印出對象a里面的user
```
var a = {
user:"追夢子",
fn:function(){
console.log(this.user); //追夢子
}
}
var b = a.fn;
var c = b.bind(a);
c();
```
ok,同樣bind也可以有多個參數,并且參數可以執行的時候再次添加,但是要注意的是,參數是按照形參的順序進行的。
```
var a = {
user:"追夢子",
fn:function(e,d,f){
console.log(this.user); //追夢子
console.log(e,d,f); //10 1 2
}
}
var b = a.fn;
var c = b.bind(a,10);
c(1,2);
```
>[danger] 注意上例中bind用法,c()傳入的的第一個參數實際上為原函數的第二個參數
總結:call和apply都是改變上下文中的this并立即執行這個函數,bind方法可以讓對應的函數想什么時候調就什么時候調用,并且可以將參數在執行的時候添加,這是它們的區別,根據自己的實際情況來選擇使用。
>[info] 轉載自[https://www.cnblogs.com/pssp/p/5215621.html](https://www.cnblogs.com/pssp/p/5215621.html)
>如侵犯了您的權益,請聯系me