關於js中this指向的總結

js中this指向問題一直是個坑,以前一直是懵懵懂懂的,大概知道一點,但一直不知道各類狀況下指向有什麼區別,今天親自動手測試了下this的指向。
1.在對象中的this
對象中的this指向咱們建立的對象,例如:chrome

var obj ={
    ccc : 1122,
    ddd : 2233,
    ded : function(){
            console.log(this);
        }  ,
    fff : function(){
            console.log(this === obj );
        }
}
obj.ded();
obj.fff();

在chrome中執行的答案以下:
clipboard.png函數

上圖咱們能夠看出咱們執行obj對象下的ded函數時,打印出來的事Object對象裏面的全部屬性,展現這個對象學習

clipboard.png

能夠看到obj對象包含的方法和屬性都包含在this對象下面,再運行fff函數,把this和obj對象進行比較,能夠看出這兩個是恆等的,因此在對象裏的this指向這個對象。測試

2.直接調用函數時的this指向
先建立一個函數:this

function main(){
    this.aad = 234;
    console.log(this);    
}
main();

運行效果以下:
clipboard.pngspa

能夠看到咱們打印出來的this對象指向全局變量window,而建立的aad變量直接包含在了window對象下面了,因此直接調用函數時this是指向window對象的。code

3.構造函數中的this指向
當咱們建立一個構造函數時,而且實例化一個對象時,this的指向哪裏呢?先建立一個函數對象

function main(){
    this.aad = 234;
    this.def = function(){
                console.log(this);
            };
    this.foo = function(){
            console.log(this === xxx);
        };
    this.xoo = function(){
            console.log(this === main);
        };
}
var xxx = new main();
xxx.def(); 
xxx.foo();
xxx.xoo();

clipboard.png

能夠看出xxx.def函數仍是指向main函數,但這只是把上下文給打印出來了,但當咱們打印this與構造函數以及實現對象比較時就能夠看出區別了,與構造函數main比較出來的值是false;與xxx函數比較時顯示是true,因此構造函數this事指向當前實例化對象的。ip

這就是我關於this學習的總結,但願能給須要的人點幫助,而後有啥不足但願有大神能指點出來。it

相關文章
相關標籤/搜索