call,apply,bind方法的區別和相同點

2021-09-03 07:43:28 字數 1621 閱讀 5628

直接貼**例項

var name="mary";

var age="17";

var person=

}console.log(person.name)

person.getage()

function getage()

getage()

結果

觀察上面的**,同樣都是getage方法,乙個在person物件中,乙個是宣告的乙個全域性方法,在person物件中的getage沒有找到age,但是全域性的getage找到了age。由此說明,在person中的方法this指向的是person物件,但全域性的this指向的物件是window

舉例說下三者使用的方式和區別

var person=

}var person1=

person.getage.call(person1)

結果

根據上面的例子我們知道,person物件裡的getage方法中的this指向的是person物件,輸出結果應該是「mary is 17」,但現在的結果卻不是,很明顯說明了person.getage.call(person1),使得該方法中的this指向了person1,所以輸出結果是「tom is 18」

現在我們修改下**如下

var person=

}var person1=

person.getage.call(person1)

person.getage.bind(person1)

console.log(person.getage.bind(person1))

person.getage.bind(person1)()

結果如下

再次調整**如下

var person=

}var person1=

person.getage.call(person1,'香蕉','蘋果')

person.getage.call(person1,['香蕉','蘋果'])

person.getage.bind(person1,['香蕉','蘋果'])()

person.getage.bind(person1,'香蕉','蘋果')()

結果如下

對比**和結果圖,我們可以得出總結如下

三個方法使用的時候,第乙個引數都是要指向的物件,第二個引數使用是有區別的

1:call方法應該將要傳的引數一一寫出,寫成陣列則會認為是只傳遞了乙個引數

3:bind的引數與call方法一樣,一一列出,寫成陣列被認為只傳遞了乙個引數

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...