JavaScript this簡明筆記

動態綁定

  • JavaScript的this並不「指向自身」。app

  • this是在運行時候進行綁定的,,並非編寫的時候綁定的。函數

  • this指向執行上下文,何爲執行上下文,個人理解是函數在「哪裏」執行的,這個記錄會包含函數在哪裏會被調用(調用棧),函數的調用方式,傳入參數等信息。this就是這個記錄的一個屬性。最多見的執行上下文就是window,如this

var a=2;
function foo(){
    alert(this.a);    //2
}
foo();

很明顯,foo函數在window這個「環境」下執行,因此this指向了window。(但在嚴格模式下,this不默認指向window,因此代碼彈出undefined)code

function foo(){
    alert(this.a);
}
var obj={
    a:2,
    foo:foo
}
obj.foo();           //2

函數foo在obj的環境下執行,this默認綁定到obj上。
以上兩種都屬於默認綁定。對象

JavaScript中能夠控制this的綁定

  • js中有call()和apply()能夠顯性的傳入要綁定的對象ip

var obj={
    a:10
}
function foo(){
    alert(this.a);           
}
foo.call(obj);             // 10
  •  new綁定io

function foo(a){
    this.a=a
}
var bar=new foo(20);
console.log(bar.a);         // 20

使用new來調用foo()時。咱們會構造一個新對象並把它綁定到foo()調用中的this上。console

this四條綁定規則的優先級

  1. 優先級最高的是new綁定,new中調用函數,this綁定到新建立的對象中。function

  2. 其次的是call,apply中顯性傳入要綁定的對象。call

  3. 函數是否在某個上下對象中調用,若是是,this綁定的是上下文對象

  4. 若是都不是,函數在全局對象執行,則綁定到全局對象中,在嚴格模式下,就綁定到undefined。

相關文章
相關標籤/搜索