JS中this關(guān)鍵字
2020/11/12 12:17:28 閱讀:2451
發(fā)布者:2451
this關(guān)鍵字雖然會根據(jù)環(huán)境變化,但是它始終代表的是調(diào)用當(dāng)前函數(shù)的那個(gè)對象。這就引出了JS中函數(shù)調(diào)用的問題。在JS中調(diào)用函數(shù)的模式可以分為4種: 方法調(diào)用模式、函數(shù)調(diào)用模式、構(gòu)造器調(diào)用模式、apply調(diào)用模式。這些模式在如何初始化關(guān)鍵參數(shù)this上存在差異。
一、方法調(diào)用模式
當(dāng)函數(shù)被保存為一個(gè)對象的屬性時(shí),它就可稱為這個(gè)對象的方法。當(dāng)一個(gè)方法被調(diào)用時(shí),this被綁定到這個(gè)對象上。如果調(diào)用表達(dá)式包含一個(gè)提取屬性的動作(. 或 []),那么它被稱為方法調(diào)用。
二、函數(shù)調(diào)用模式
當(dāng)一個(gè)函數(shù)并非一個(gè)對象的屬性時(shí),那么它就是被當(dāng)做函數(shù)來調(diào)用的。在此種模式下,this被綁定為全局對象,在瀏覽器環(huán)境下就是window對象。
三、構(gòu)造函數(shù)模式
如果在一個(gè)函數(shù)前面加上new關(guān)鍵字來調(diào)用,那么就會創(chuàng)建一個(gè)連接到該函數(shù)的prototype成員的新對象,同時(shí),this會被綁定到這個(gè)新對象上。這種情況下,這個(gè)函數(shù)就可以成為此對象的構(gòu)造函數(shù)。
四、apply調(diào)用模式
在JS中,函數(shù)也是對象,所有函數(shù)對象都有兩個(gè)方法:apply和call,這兩個(gè)方法可以讓我們構(gòu)建一個(gè)參數(shù)數(shù)組傳遞給調(diào)用函數(shù),也允許我們改變this的值。