javascript - 求解:實例物件呼叫constructor,此時constructor內的this的指向?
ringa_lee
ringa_lee 2017-07-05 10:39:35
0
1
822

這個問題其實是來自分析jQuery原始碼的時候,看到裡面使用了var ret = jQuery.merge(this.constructor(), elems );,裡面this.constructor()回傳的是init方法所建立的空的實例物件。因此對其中this的指向產生疑惑。
以下為試驗程式碼:

function Person() {
    this.name = 'ddadaa';
    console.log(this);
}
var p1 = new Person();
p1.constructor();        //  Person {name: "ddadaa"}
var p2 = p1.constructor;
p2();                    //打印的是window

這裡為什麼直接呼叫constructor(),裡面的this的指向就發生了改變,並且自動建立了一個新的物件?是不是constructor()方法的內部實作對此有所影響?

ringa_lee
ringa_lee

ringa_lee

全部回覆(1)
某草草

這個和constructor()方法的內部實作沒有什麼關係,其實就是函數內this指向的問題。
當函數作為物件的屬性被呼叫的時候,this指向這個物件;
當函數直接呼叫的時候,在非嚴格模式下,this指向window
p1.conoror的就是windowp1.conoror Person函數,當呼叫p1.constructor();時,Person是作為p1的屬性被呼叫的,所以this指向p1;當呼叫var p2 = p1.conorstructp. );時,其實就等於直接呼叫Person();,所以

this🎜指向🎜window🎜。 🎜
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板