一鲫售,認(rèn)識(shí)原型
? ? ?大部分函數(shù)(重點(diǎn)是構(gòu)造函數(shù))都內(nèi)置一個(gè)prototype的屬性(又叫原型屬性或者顯式原型)验懊,屬性值是一個(gè)對象缩膝,對象中存儲(chǔ)的屬性和方法是供當(dāng)前類的所有下屬實(shí)例惊来,調(diào)用的公共的屬性和方法。
? ? 注意 : 箭頭函數(shù)是沒有prototype屬性的桐腌。
? ? ? ? ? ? ? ? ? 在原型對象上有一個(gè)內(nèi)置的屬性constructor(構(gòu)造器)拄显,屬性值是當(dāng)前函數(shù)本身。
二案站,認(rèn)識(shí)原型鏈
? ? ?每一個(gè)對象都內(nèi)置一個(gè)__proto__屬性(又叫原型鏈或者隱式原型)躬审,屬性值指向自己所屬類的原型對象。
? ? ?注意 :?Object.prototype這個(gè)對象的__proto__值是null蟆盐,因?yàn)镺bject是所有對象的“基類”
三承边,
? ? ? ? 1)函數(shù)數(shù)據(jù)類型包括:
? ? ? ? ?普通函數(shù)
? ? ? ? ?箭頭函數(shù)
? ? ? ? ?生成器函數(shù)
? ? ? ? ?構(gòu)造函數(shù)(類)等等
? ? ? ? 2)對象數(shù)據(jù)類型包括:
? ? ? ? ?普通對象,日期對象舱禽,正則對象炒刁,數(shù)組對象。誊稚。翔始。
? ? ? ? ?實(shí)例也是對象數(shù)據(jù)類型的(排除7中基本數(shù)據(jù)類型值)
? ? ? ? ?prototype/__proto__的屬性值也是對象數(shù)據(jù)類型的(排除Function.prototype) ?
四,圖解Object Array arr原型和原型鏈
五里伯,原型鏈查找機(jī)制
首先查找當(dāng)前實(shí)例對象的私有屬性城瞎,私有中有,獲取的就是私有的疾瓮;如果私有中沒有脖镀,則瀏覽器默認(rèn)基于__proto__找其所屬類的原型對象上的公共的屬性和方法;如果還找不到狼电,則基于原型對象上的__proto__繼續(xù)向上查找蜒灰。弦蹂。。直到找到Object.prototype為止
例如:
let arr = [10,20]
console.log(arr.hasOwnProperty('push'))
console.log(Array.prototype.hasOwnProperty('push'))
console.log(arr.__proto__.hasOwnProperty('push'))
console.log(Array.prototype === arr.__proto__)
六强窖,
搞清楚凸椿,有時(shí)候都是調(diào)用的公共方法,但是this的指向不一樣翅溺,結(jié)果也不一樣
f2.getY() 和f2.__proto__.getY() 脑漫,都是原型對象中的getY()方法,但是this的指向不同