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

這個問題其實是來自分析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.conororPerson函數,當呼叫p1.constructor();時,Person是作為p1的屬性被呼叫的,所以this指向p1;當呼叫var p2 = p1.conorstructp. );時,其實就等於直接呼叫Person();,所以

this指向window。
    最新下載
    更多>
    網站特效
    網站源碼
    網站素材
    前端模板
    關於我們 免責聲明 Sitemap
    PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!