一、原型鏈
利用prototype實現繼承,prototype物件是個模板,要例項的物件都是以這個模板為基礎,它的任何屬性和方法都被傳遞給那個類的所有例項,原型鏈利用這種功能來實現繼承機制。
如果利用原型方式實現繼承,例項如下:
原型鏈function classa()
classa.prototype.color="red";
classa.prototype.saycolor=function()
function classb()
classb.prototype=newclassa();
通過原型鏈,classa的所有屬性和方法傳遞給了classb,用prototype的確是方便很多。
注意的是呼叫classa的建構函式是,沒有給它傳遞引數,這是在原型鏈中的標準做法。要確保建構函式沒有任何引數。如果建構函式中有引數的話會怎樣呢?那樣便不能完全的繼承,只能繼承父類通過prototype初始的屬性和方法,在建構函式中初始的屬性和方法便不會繼承。
與物件冒充相似,子類的所有屬性和方法都必須出現在prototype屬性被賦值之後,因為在它之前賦值的所有方法都會被刪除。為什麼呢?因為prototype屬性被替換成了新的物件,原始物件的prototype屬性以不復存在了,例如:
code
function classb()
classb.prototype=new classa();
classb.prototype.name="";
classb.prototype.sayname=function()
二.構造繼承法
function classa(scolor)
} function classb(scolor,sname)
}
三、混合方式
這種繼承方式使用建構函式定義類,並未使用任何原型,物件冒充的主要問題是必須使用建構函式方式,這不是最好的選擇。不過如果使用原型鏈,就無法使用帶參的建構函式了。開發者該如何選擇呢?答案很簡單,兩者都使用。建立類的最好方式是用建構函式方式定義屬性,用原型方式定義方法。這種方式同樣適用於繼承機制,用物件冒充繼承函式的屬性,用原型鏈繼承prototype物件的方法。
四、物件冒充實現多重繼承
感覺這種方式利用了js中類和函式的模糊性,同是function關鍵字申明方法,既可以說他是函式,也可以說他是類,js太靈活了,下面的例子說明下:
function classa(scolor) }
function classb(scolor)
classb執行classa方法便相當於繼承了classa,在呼叫完畢後要刪除newmethod,因為後續新增的屬性和方法如果和超類同名,就會覆蓋超類的相關屬性和方法。
利用這種繼承方式可以實現多重繼承,如:
function classd(scolor)
利用這種多重繼承方法有個弊端,如果classa和classb具有相同的屬性和方法,classb有較高的優先順序。
JS實現繼承的方法
一 物件冒充 function parent username function child username,password var parent newparent liuxiaowei var child newchild admin 123456 parent.hello liuxiaow...
JS實現繼承的常用方法
1 建構函式繼承 function parent name parent.prototype.saihi function function child name,age,gender let child new child 王磊 20,男 console.log child.name 王磊 chi...
JS實現繼承的幾種方法
call方法的第乙個引數的值賦值給類 即方法 中出現的 this call方法的第二個引數開始依次賦值給類 即方法 所接受的引數 call 相同,第二個引數為陣列型別,這個陣列中的每個元素依次賦值給類 即方法 所接受的引數 this 的指向,我們就是利用它的這個特性來實現繼承的。補充知識點 func...