call,apply,bind方法的總結

2022-02-12 12:12:47 字數 1378 閱讀 3118

一般用來指定this的環境,在沒有學之前,通常會有這些問題。

var a = 

}var b = a.fn;

b(); //undefined

我們是想列印物件a裡面的user卻列印出來undefined是怎麼回事呢?如果我們直接執行a.fn()是可以的。

var a = 

}a.fn(); //追夢子

這裡能夠列印是因為,這裡的this指向的是函式a,那為什麼上面的不指向a?我們如果需要了解this的指向問題,請看徹底理解js中this的指向,不必硬背這篇文章。

雖然這種方法可以達到我們的目的,但是有時候我們不得不將這個物件儲存到另外的乙個變數中,那麼就可以通過以下方法。

1、call()

var a = 

}var b = a.fn;

b.call(a);

通過在call方法,給第乙個引數新增要把b新增到哪個環境中,簡單來說,this就會指向那個物件。

call方法除了第乙個引數以外還可以新增多個引數,如下:

var a = 

}var b = a.fn;

b.call(a,1,2);

var a = 

}var b = a.fn;

var a = 

}var b = a.fn;

或者

var a = 

}var b = a.fn;

var arr = [500,20];

var a = 

}}var b = a.fn;

3、bind()

先來說說它們的不同吧。

var a = 

}var b = a.fn;

b.bind(a);

var a = 

}var b = a.fn;

var c = b.bind(a);

console.log(c); //function()

那麼我們現在執行一下函式c看看,能不能列印出物件a裡面的user

var a = 

}var b = a.fn;

var c = b.bind(a);

c();

ok,同樣bind也可以有多個引數,並且引數可以執行的時候再次新增,但是要注意的是,引數是按照形參的順序進行的。

var a = 

}var b = a.fn;

var c = b.bind(a,10);

c(1,2);

call, apply, bind方法詳解

function a x,y var c a.call c,5,6 5 6 arguments 5,6 再看例子 function person age,male var person1 person.call person1,20,female person1 var person var per...

call apply bind方法詳解

var name window var newthis function showname info1,info2 showname a b 輸出 window a b 通過bind改變this指向 var newshowname showname.bind newthis,hello world ...

call apply bind 方法用法測試

call 1 use strict function test xx,yy let a 呼叫test方法,將 a 放到方法裡當作 this。所以裡列印a才會有值的。test.call a,10,20 console.log a 3 use strict function test xx,yy let...