this關(guān)鍵字(個人學(xué)習(xí)筆記)

this關(guān)鍵字的理解:

? ? ? ? ? ? JS的this關(guān)鍵字表示的是當(dāng)前行為的執(zhí)行主體,this只與執(zhí)行的主題有關(guān),與函數(shù)在哪執(zhí)行和定義無關(guān)。

this的判定:

? ? ? ? ?(1)函數(shù)執(zhí)行時,首先看函數(shù)名前是否有" . ",有的話,this就是指向" . "前面的執(zhí)行主體;否則就指向window。

? ? ? ? ?(2)立即執(zhí)行函數(shù)的this永遠(yuǎn)指向window。

? ? ? ? ?(3)給元素的某一事件綁定方法,當(dāng)事件觸發(fā)時,執(zhí)行相應(yīng)的方法,方法中的this就時指向當(dāng)前元素。

? ? ? ? ?(4)如圖補充說明:

補充說明

? ? ? ? ? ? (5)使用構(gòu)造函數(shù)創(chuàng)建實例時,函數(shù)體中的this指向new出來的實例對象,實例對象中定義的方法中的this需要看具體的執(zhí)行主體,無法確定;構(gòu)造函數(shù)原型prototype的方法中的this指向?qū)嵗龑ο螅蝗鐖D中實例對象中定義的方法中的this就指向了window:

實例方法被保存到全局作用域

詳解構(gòu)造函數(shù)與不同函數(shù)this的差別:

? ? ? ? ? ? //函數(shù)預(yù)編譯過程this ——>? ?window,運行機制如下:

? ? ? ? ? ? ? ?function? ? Test(){

? ? ? ? ? ? ? ? ? ? ? ? var? ? a = 1;

? ? ? ? ? ? ? ? ? ? ? ? function? ? b(){? ? }

? ? ? ? ? ? ? ? ? ? ? ? //預(yù)編譯產(chǎn)生AO對象:

? ? ? ? ? ? ? ? ? ? ? ? /*AO{

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? a :undefined,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? b :function(){? ? },

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? arguments : undefined,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? this :? window

? ? ? ? ? ? ? ? ? ? ? ? */

? ? ? ? ? ? ? ?}

? ? ? ? ? ? ? ? Test();

? ? ? ? ? ? ? ? //當(dāng)把函數(shù)當(dāng)作構(gòu)造函數(shù)執(zhí)行時,new的使用會使this的指向發(fā)生變化,具體細(xì)節(jié)前面筆記以寫出

? ? ? ? ? ? ? ? //var? ? test = new Test();

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容