this是javascript中的關鍵字,它最終指向調用它的對象,分紅多種狀況。javascript
.例1java
function o(){ var a = "bbb"; consle.log(this.a);//undefined consle.log(this);//window } o();
這個例子裏是由window調用的o(),所以o()裏的this指向window,而window中並無a對象,因此,this.a輸出undefined。函數
.例2this
function o(){ var a = "bbb"; fn:function(){ consle.log(this.a);//bbb consle.log(this);//o } } o.fn();
這個例子是由o調用的fn(),所以fn()裏的this指向o(),this.a輸出o()中a對象的值。code
.例3對象
function o(){ var a = 1; b:{ a = 2; fn:function(){ consle.log(this.a);//2 consle.log(this);//b } } } o.b.fn();
這個例子是由b調用的fn(),所以fn()裏的this指向b,this.a輸出b中a對象的值。這個例子說明若是一個函數中包含多個對象,儘管這個函數是被最外層的對象所調用,this指向的也只是它上一級的對象。ip
.例4io
function o(){ var a = 1; b:{ a = 2; fn:function(){ consle.log(this.a);//undefined consle.log(this);//window } } } var j = o.b.fn(); j();
這個例子中最終執行的是j()函數,由window調用,因此this指向window,this.a輸出undefined。所以this是看它執行的時候誰調用的,誰調用就指向誰。console
.例5function
function fn() { this.user = 'bbb'; return function(){};//返回的是對象 } var a = new fn; console.log(a.user); //undefined
.例6
function fn() { this.user = 'bbb'; return 1; } var a = new fn; console.log(a.user); //bbb
這兩個例子說明當this碰到return時,若是返回值是一個對象,那麼this指向的就是那個返回的對象,若是返回值不是一個對象那麼this仍是指向函數的實例。