摘要:基于原型的繼承原型上的屬性被共享了不是我們所需要的這種繼承會有如下的缺點如果父類包含有引用類型的屬性所有的子類就會共享這個屬性。
基于原型的繼承
function father() { this.faName = "father"; this.names=["11","22"] } father.prototype.getfaName = function() { console.log(this.faName); }; function child() { this.chName = "child"; } child.prototype = new father(); child.prototype.constructor = child; child.prototype.getchName = function() { console.log(this.chName); }; var c1=new child(); c1.names.push("sasa"); var c2=new child(); console.log(c2.names) //原型上的names屬性被共享了 不是我們所需要的
這種繼承會有如下的缺點:
1、如果父類包含有引用類型的屬性 所有的子類就會共享這個屬性。
2、在創建子類的實例時 不能向父類的構造函數傳遞參數
原型繼承+構造函數的繼承
function father(name) { this.faName = "father"; } father.prototype.getfaName = function() { console.log(this.faName); }; function child(args) { this.chName = "child"; father.apply(this,[]); //第二次調用父類構造函數 } child.prototype = new father(); //第一次調用父類構造函數 child.prototype.constructor = child; child.prototype.getchName = function() { console.log(this.chName); };
子類繼承父類的屬性,一組在子類實例上,一組在子類原型上(在子類原型上創建不必要的多余的屬性)
寄生組合實現繼承function father(name) { this.faName = "father"; } father.prototype.getfaName = function() { console.log(this.faName); }; function object(o) { //創建一個原型為o的新對象 function F() {}; F.prototype = o; return new F(); } /** * 通用方法實現子類繼承父類 * @param {function} child 子類構造函數 * @param {function} father 被繼承的父類構造函數 */ function inheritPrototype(child, father) { var prototype = object(father.prototype); //創建一個指定原型的對象 prototype.constructor = child; //增強對象 child.prototype = prototype; //子類的原型等于該對象 } function child(args) { this.chName = "child"; father.apply(this,[]); //調用父類的構造函數可以通過args傳遞參數 } inheritPrototype(child, father); //子類的原型等于new 空函數(), 而new 空函數()出來的對象的原型等于父類的原型 child.prototype.getchName = function() { console.log(this.chName); }; console.log( child.prototype.isPrototypeOf(new child()) ); //true console.log(new child() instanceof child); //true
優點:1.只調用一次父類的構造函數,避免了在子類原型上創建不必要的,多余的屬性
2.原型鏈保持不變es6實現的繼承
class father{ constructor(name){ this.name=name this.names=[1,2,3] } getname(){ console.log(this.name); } } class child extends father{ constructor(name){ super(name); } sayHello(){ console.log("sayHello"); } static hh(){ console.log("hh") } } var cc=new child("juanjuan"); cc.sayHello(); cc.getname(); //juanjuan child.hh(); //hh cc.names.push("wqwq"); var c1=new child("sasasa"); console.log(c1.names) //[1,2,3]
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/88921.html
摘要:在上家公司裸辭之后,經過一段時間休整,月中下旬面試了一些公司,由于本人框架使用的是,所以面試題涉及到框架的都是,現將面試題整理一下列舉常用的特性。事件冒泡以及事件捕獲。其他前端分頁和后端分頁優缺點。包含多個子節點及孫節點,遍歷。 在上家公司裸辭之后,經過一段時間休整,5月中下旬面試了一些公司,由于本人框架使用的是vue,所以面試題涉及到框架的都是vue,現將面試題整理一下: es6 ...
摘要:在上家公司裸辭之后,經過一段時間休整,月中下旬面試了一些公司,由于本人框架使用的是,所以面試題涉及到框架的都是,現將面試題整理一下列舉常用的特性。事件冒泡以及事件捕獲。其他前端分頁和后端分頁優缺點。包含多個子節點及孫節點,遍歷。 在上家公司裸辭之后,經過一段時間休整,5月中下旬面試了一些公司,由于本人框架使用的是vue,所以面試題涉及到框架的都是vue,現將面試題整理一下: es6 ...
摘要:番外關于糯米面試結果總而言之一句話糯米的面試掛了過程把面試過程中面試官的問題分享一下有幾種數據類型。將一個字符串轉化為數字,將數字轉化為字符串。獲取當前網址并從中截取信息。究其愿意還是對字符串和數組的操作不熟練,我決定深刻反思。 番外:關于糯米面試 結果 總而言之一句話:糯米的面試掛了 過程 把面試過程中面試官的問題分享一下: js有幾種數據類型。 將一個字符串轉化為數字,將數字轉化...
摘要:番外關于糯米面試結果總而言之一句話糯米的面試掛了過程把面試過程中面試官的問題分享一下有幾種數據類型。將一個字符串轉化為數字,將數字轉化為字符串。獲取當前網址并從中截取信息。究其愿意還是對字符串和數組的操作不熟練,我決定深刻反思。 番外:關于糯米面試 結果 總而言之一句話:糯米的面試掛了 過程 把面試過程中面試官的問題分享一下: js有幾種數據類型。 將一個字符串轉化為數字,將數字轉化...
摘要:番外關于糯米面試結果總而言之一句話糯米的面試掛了過程把面試過程中面試官的問題分享一下有幾種數據類型。將一個字符串轉化為數字,將數字轉化為字符串。獲取當前網址并從中截取信息。究其愿意還是對字符串和數組的操作不熟練,我決定深刻反思。 番外:關于糯米面試 結果 總而言之一句話:糯米的面試掛了 過程 把面試過程中面試官的問題分享一下: js有幾種數據類型。 將一個字符串轉化為數字,將數字轉化...
閱讀 792·2021-09-22 16:01
閱讀 2084·2021-08-20 09:37
閱讀 1693·2019-08-30 15:54
閱讀 1689·2019-08-30 15:44
閱讀 826·2019-08-28 18:23
閱讀 3005·2019-08-26 12:17
閱讀 1005·2019-08-26 11:56
閱讀 1539·2019-08-23 16:20