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)如圖補(bǔ)充說明:
? ? ? ? ? ? (5)使用構(gòu)造函數(shù)創(chuàng)建實(shí)例時,函數(shù)體中的this指向new出來的實(shí)例對象碾局,實(shí)例對象中定義的方法中的this需要看具體的執(zhí)行主體荆残,無法確定;構(gòu)造函數(shù)原型prototype的方法中的this指向?qū)嵗龑ο缶坏保蝗鐖D中實(shí)例對象中定義的方法中的this就指向了window:
詳解構(gòu)造函數(shù)與不同函數(shù)this的差別:
? ? ? ? ? ? //函數(shù)預(yù)編譯過程this ——>? ?window内斯,運(yùn)行機(jī)制如下:
? ? ? ? ? ? ? ?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()备徐;