call,apply,bind,this
阿新 • • 發佈:2019-03-11
all 都是 urn 函數聲明 return 綁定 his 普通 運行
1.this:js的this總是指向一個對象,具體那個對象是運行時基於函數的執行環境動態綁定的,而非函數聲明時的環境。
this的指向(除去eavl和with):
a.作為對象的方法調用 :this指向對象本身
b.作為普通函數調用(函數自執行,匿名函數) :this指向window對象
c.構造器調用
d.apply,call調用。
2.自定義封裝document.getElementById
var getId = document.getElementById;
var div = getId("div");//本身期望this指向的是document,但是經此調用函數執行指向window;
修改:
document.getElementById = (function(fuc){
return function(){
return fuc.apply(document.getElementById,arguments)
}
})(document.getElementById)
var getId = document.getElementById;
var div = getId("div");//this執行document
3.call,apply
都是改變this指向,參數不同,第一個都是this指向的對象,第二個參數為參數。apply為數組,call隨便,偏向apply
當第一個參數為null時。函數體this默認指向宿主對象。瀏覽器中指向window
call,apply,bind,this