亚洲免费在线视频-亚洲啊v-久久免费精品视频-国产精品va-看片地址-成人在线视频网

您的位置:首頁技術文章
文章詳情頁

JavaScript 實現繼承的幾種方式

瀏覽:77日期:2023-10-04 09:50:08

非ES6代碼實現繼承的主流方式主要可以分為:構造繼承、原型鏈繼承、構造繼承+原型鏈繼承組合繼承、以及在組合繼承上衍生出的繼承方式。

構造繼承 (借助call實現)

實現

function Super(age){ this.age = age; this.say = function(){ console.log(this.age) }}function Child(name,age){ Super.call(this,age) this.name = name;}var child = new Child('min',23)console.log(child instanceof Super); // falseconsole.log(child instanceof Child); // true

優點

(1) 可以實現多繼承(call多個父類對象)(2) 構造函數中可向父級傳遞參數

缺點

(1) 只能繼承父類實例的屬性和方法,不能繼承原型上的屬性和方法(2) 實例并不是父類的實例,只是子類的實例

原型鏈繼承 (借助原型鏈實現)

實現

function Super(){ this.getName = function(){ console.log(this.name) }}function Child(name){this.name = name;}Child.prototype = new Super(); // 這里可以傳構造參數Child.prototype.constructor = Child;var child = new Child('min');console.log(child instanceof Super); // trueconsole.log(child instanceof Child); // trueconsole.log(child.constructor); // Child

優點(1) 父類原型屬性與方法,子類都能訪問到(2) 實例是子類的實例,也是父類的實例

缺點(1) 無法實現多繼承 (2) 創建子類實例時,無法向父類構造函數傳參

組合繼承 (構造繼承+原型鏈繼承)

實現

function Super(age){ this.age = age; this.getAge = function(){ console.log(this.age); }}function Child(name,age){ Super.call(this,age) this.name = name;}Child.prototype = new Super(1); Child.prototype.constructor = Child;var child = new Child('min',23);console.log(child instanceof Super); // trueconsole.log(child instanceof Child); // trueconsole.log(child.constructor); // Child

優點(1) 結合了構造+原型鏈繼承的優點

缺點(1) Child.prototype = new Super(); 多調用了一次,使得原型對象中存在一些不必要屬性,如上面例子中age屬性

寄生組合繼承

實現

function Super(age){ this.age = age; this.getAge = function(){ console.log(this.age) }}function Child(name,age){ Super.call(this,age) this.name = name;}(function(){ function Copy(){} Copy.prototype = Super.prototype; Child.prototype = new Copy();})()Child.prototype.constructor = Child;var child = new Child('min',23);

備注問:為什么沒有直接使用 Child.prototype = Super.prototype;答:Child.prototype.constructor = Child;關鍵代碼,上面寫Super.prototype 也會變(引用類型,指向同一地址)

優點(1) 這應該是實現繼承最完美的方案了,es6的extends關鍵字,在babel轉換后代碼也是通過這種方式實現的繼承。

額外:借助(Object.create)

實現

function Super(age){ this.age = age; this.getAge = function(){ console.log(this.age) }}function Child(name,age){ Super.call(this,age) this.name = name;}Child.prototype = Object.create(Super.prototype,{ constructor:{ // 構造函數修復 value: Child }})var child = new Child('min',23);console.log(child instanceof Super); // trueconsole.log(child instanceof Child); // trueconsole.log(child.constructor); // Child

以上就是JavaScript 實現繼承的幾種方式的詳細內容,更多關于JavaScript 實現繼承的資料請關注好吧啦網其它相關文章!

標簽: JavaScript
相關文章:
主站蜘蛛池模板: 欧美日韩一区二区三 | 中文字幕视频在线观看 | 91chinesevideo在线观看 | 成人国产精品免费软件 | 一区二区三区日韩 | 中文字幕成人免费高清在线 | 国产一有一级毛片视频 | 在线播放国产一区二区三区 | 男女国产一级毛片 | 高清国产精品久久 | 一级色| 日本高清免费视频www | 日本农村寡妇一级毛片 | 真人一级毛片全部免 | 欧美一级专区免费大片俄罗斯 | 欧美视频三区 | 亚洲天堂网在线观看 | 日本久久综合 | 美女国产在线观看免费观看 | 免费一级在线 | 国产成人看片免费视频观看 | 免费一级a毛片在线播放视 免费一级α片在线观看 | 成年免费a级毛片 | 久草在线免费资源 | pgone太大了兽王免费视频 | 国产黄色在线网站 | 色拍拍在精品视频69影院在线 | 性久久久久久久久久 | 麻豆日韩 | 精品一区二区三区视频在线观看免 | b毛片| 欧美成人性色xxxxx视频大 | 国内精品美女写真视频 | 欧美一级片毛片 | 亚洲欧洲一二三区机械有限公司 | 亚洲一区二区三区免费视频 | 久久久久琪琪精品色 | 久久亚洲成a人片 | 国产成人综合精品一区 | 亚洲a网| 韩国一级黄色毛片 |