js中this的指向問題

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仍是指向函數的實例。

相關文章
相關標籤/搜索