1.原型鏈繼承? ? :繼承方法
每一個(gè)構(gòu)造函數(shù)都有一個(gè)原型對象 :? Parent.prototype
每個(gè)實(shí)例都有一個(gè)指向原型對象的指針? :? par.__proto__
原型鏈繼承是通過創(chuàng)建Parent的示例,并把它掛載到Son的原型對象上實(shí)現(xiàn)的。
實(shí)例化對象son1調(diào)用sayName方法:1)會(huì)從實(shí)例自身找冗疮,如果有萄唇,停止往下尋找
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 2)否則,會(huì)從son1的原型? son1.__proto__,也就是Son.prototype去找
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 3)Son.prototype掛載著Parent的實(shí)例化對象术幔,現(xiàn)在自身屬性上找另萤,沒有,然后實(shí)例化對象也有自己的? ? ? ? ? ? ? ? ?????????????????????????????????????????????????????????__proto__,指向原型對象 诅挑, Parent.Prototype,找到了sayName方法
//原型鏈問題? ?:構(gòu)造函數(shù)上如果有定義了引用類型的屬性會(huì)被所有實(shí)例公用
2.借用構(gòu)造函數(shù)繼承? :繼承屬性
原理:通過call()? 改變this指向
3.組合繼承? (原型鏈+借用構(gòu)造函數(shù)繼承)
4.原型式繼承
要求 有一個(gè)對象可以作為另一個(gè)對象的基礎(chǔ),傳入一個(gè)對象拔妥,返回一個(gè)把這個(gè)對象賦值給返回對象的原型上忿危,實(shí)現(xiàn)繼承
和原型鏈繼承相似,person.color因?yàn)槭且妙愋偷膶傩远镜铡0┮希詴?huì)被object實(shí)例化出來的實(shí)例共享