国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

node.js|vue.js|jquery|angularjs|React|json|js教程|

服務器之家 - 編程語言 - JavaScript - js教程 - JavaScript 實現繼承的幾種方式

JavaScript 實現繼承的幾種方式

2022-01-21 15:24him8 js教程

這篇文章主要介紹了JavaScript 實現繼承的幾種方式,幫助大家更好的理解和使用JavaScript,感興趣的朋友可以了解下

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

構造繼承 (借助call實現)

實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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); // false
console.log(child instanceof Child); // true

優點

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

缺點

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

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

實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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); // true
console.log(child instanceof Child); // true
console.log(child.constructor); // Child

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

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

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

實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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); // true
console.log(child instanceof Child); // true
console.log(child.constructor); // Child

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

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

寄生組合繼承

實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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)

實現

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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); // true
console.log(child instanceof Child); // true
console.log(child.constructor); // Child

以上就是JavaScript 實現繼承的幾種方式的詳細內容,更多關于JavaScript 實現繼承的資料請關注服務器之家其它相關文章!

原文鏈接:https://juejin.cn/post/6928702425016565774

延伸 · 閱讀

精彩推薦
  • js教程四個Javascript 中的 For 循環

    四個Javascript 中的 For 循環

    在 ECMAScript5(簡稱 ES5)中,有三個循環。在 2015 年 6 月發布的 ECMAScript6(簡稱 ES6)中,新增了一種循環類型。...

    鋒享前端4472022-01-12
  • js教程詳解三種Javascript圖片預加載的方法

    詳解三種Javascript圖片預加載的方法

    預加載圖片是提高用戶體驗的一個很好方法。圖片預先加載到瀏覽器中,訪問者便可順利地在你的網站上沖浪,并享受到極快的加載速度。...

    鋒享前端9522022-01-04
  • js教程JavaScript實現原型封裝輪播圖

    JavaScript實現原型封裝輪播圖

    這篇文章主要為大家詳細介紹了JavaScript原型封裝輪播圖,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    zyhyoustrive12232021-12-21
  • js教程Javascript實現打鼓效果

    Javascript實現打鼓效果

    這篇文章主要為大家詳細介紹了Javascript實現打鼓效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    qq_413093507482022-01-11
  • js教程javascript實現點擊產生隨機圖形

    javascript實現點擊產生隨機圖形

    這篇文章主要為大家詳細介紹了javascript實現點擊產生隨機圖形,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    半成熟、9612022-01-07
  • js教程詳解ES6 中的Object.assign()的用法實例代碼

    詳解ES6 中的Object.assign()的用法實例代碼

    這篇文章主要介紹了ES6 Object.assign()的用法及用途,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下...

    半夏遮流年シ11472021-12-30
  • js教程js實現移動端輪播圖滑動切換

    js實現移動端輪播圖滑動切換

    這篇文章主要為大家詳細介紹了js實現移動端輪播圖滑動切換,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    浪漫前端11472021-12-15
  • js教程js實現頭像上傳并且可預覽提交

    js實現頭像上傳并且可預覽提交

    這篇文章主要介紹了js如何實現頭像上傳并且可預覽提交,幫助大家更好的理解和使用js,感興趣的朋友可以了解下...

    harold10244112021-12-20
主站蜘蛛池模板: 亚洲免费在线视频 | 不卡中文一区 | 911av视频 | 91嫩草精品 | 刘亦菲的毛片 | 亚洲欧美视频一区 | 国产精品欧美一区二区三区 | 日韩精品av一区二区三区 | 开心久久婷婷综合中文字幕 | 国产成人高清 | 国产黄色在线播放 | 欧美日韩在线一区二区 | 五月天婷婷综合 | 国产精品亚洲第一区在线暖暖韩国 | 国内精品一区二区三区 | 亚洲视频欧美视频 | 黄色免费网站 | 亚洲精选一区二区 | 亚洲综合第一页 | 亚洲精品二区三区 | 色爱区成人综合网 | 亚洲男人的天堂视频 | 欧美日韩一区二区三区不卡视频 | 久久av一区二区三区 | 国产福利在线 | 国产精品免费一区 | www.麻豆av | 欧美久久久久 | 成视频年人免费看黄网站 | 国产精品第一国产精品 | 国产精品18久久久久久首页狼 | 亚洲精品一区二区三区蜜桃久 | 日韩在线 | 黄色片网站在线看 | 日韩欧美国产精品综合嫩v 在线视频 中文字幕 | 自拍偷拍五月天 | 亚洲美女久久 | 一级片大片 | 欧洲精品码一区二区三区免费看 | 亚洲精品国精品久久99热 | 成人国产精品一级毛片视频 |