直接貼**例項
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...