JS 原型鏈(四)-new,this框都,instanceof低淡,typeof,for...in
new和this是javascript中非常重要的兩個(gè)關(guān)鍵字瞬项。它們出現(xiàn)在了前面的例子中蔗蹋,這里簡單記錄下對它們的理解。
首先說下new一個(gè)對象的過程:
1.創(chuàng)建一個(gè)新對象囱淋。? ? ? 2.this指向這個(gè)新對象猪杭。? ?3.執(zhí)行代碼,即對this賦值妥衣。? ? 4.返回this
此外皂吮,構(gòu)造函數(shù)就像一個(gè)模板∷笆郑可以new出多個(gè)實(shí)例蜂筹。可以使用instanceof判斷引用類型屬于哪個(gè)構(gòu)造函數(shù)的方法芦倒。一個(gè)函數(shù)是否是一個(gè)變量的構(gòu)造函數(shù)艺挪。f instanceof Foo的判斷邏輯是:f 的__proto__一層一層往上,看能否對應(yīng)到Foo.prototype.再試著判斷f instanceof Object.? ? ?
這里有一個(gè)有趣的地方兵扬, div1 instanceof Function為false麻裳,可是div1 instanceof Object為true。而?Ele instanceof Function為true器钟,同時(shí)Ele instanceof Object為true津坑。因?yàn)檫@里是兩條線。一條線是Function到Object再到null傲霸,一條線是沒有Function,到 Object再到null疆瑰。這個(gè)差異同時(shí)也可以從new一個(gè)對象的過程中可以看出。
typeof 總是習(xí)慣拿來和instanceof來比較昙啄,上面說了instanceof是用來判斷引用類型屬于哪個(gè)構(gòu)造函數(shù)的方法穆役。那在js中,typeof又能夠得到哪些類型呢跟衅?
從上面的截圖中可以看出孵睬,typeof只能準(zhǔn)確辨別出js中的值類型,對于引用類型只能區(qū)別出function伶跷,其他都是oobject掰读∶啬可能因?yàn)閒unction在js中太重要的緣故。
this的指向總是讓人捉摸不透蹈集,這里用一句話概述它最為普遍的指向:通過調(diào)用對象屬性方法來訪問this,t無論這個(gè)方法是自身的一個(gè)屬性還是從原型中得到的一個(gè)屬性,this永遠(yuǎn)指向這個(gè)對象烁试。這個(gè)例子可以從(二)中的例子中看出,多次碰到this.ele都是指一個(gè)元素拢肆,this一直指向div1自身减响。
for...in用來循環(huán)對象自身的屬性。如果要屏蔽來自原型的屬性郭怪,則可以加上f.hasOwnProperty(item)支示。這里注意高級瀏覽器這一步幫我們做了,但是還是建議加上這個(gè)判斷鄙才,保證程序的健壯性颂鸿。