欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

聊聊JavaScript如何實現(xiàn)繼承及特點

 更新時間:2017年04月07日 10:06:55   作者:娜姐聊前端  
“繼承”是面向?qū)ο缶幊汤锩娼?jīng)常提及到的概念,它的目的是實現(xiàn)代碼復(fù)用。這篇文章主要介紹了聊聊JavaScript如何實現(xiàn)繼承及特點,有興趣的可以了解一下。

“繼承”是面向?qū)ο缶幊汤锩娼?jīng)常提及到的概念,它的目的是實現(xiàn)代碼復(fù)用。JavaScript并沒有“類”的概念,那么,它如何實現(xiàn)繼承呢?

(ES6有關(guān)鍵字class和extend,繼承的語法與Java等面向?qū)ο笳Z言類似,但是,ES6 class,只是JavaScript原型繼承的語法糖而已)

1. 類式繼承

關(guān)鍵點:通過構(gòu)造函數(shù)實現(xiàn)繼承。

父類:

function Parent(name) {
 this.name = name || "parent";
}
Parent.prototype.say = function() {
 return this.name;
}

子類:

function Child() {}

(1) 父類對象繼承

Child.prototype = new Parent("child");

var child = new Child();
child.say(); // "child"

特點:使用這種繼承模式,子類不僅僅會繼承父類原型上的方法/屬性,還會繼承父類自身的屬性。

這種模式的缺點是,在初始化父類對象指向給子類原型時,并不確定父類構(gòu)造函數(shù)的初始化參數(shù)(Child.prototype = new Parent("child");),而且,往往這些參數(shù)并不是子類需要的。

(2) 借用構(gòu)造函數(shù)

改造子類:

function Child(){
 Parent.apply(this, arguments);
}

特點:使用這種繼承模式,子類只會繼承父類自身的屬性。

缺點很明顯,它無法從原型鏈中繼承任何方法/屬性。

(3) 共享原型

Child.prototype = Parent.prototype;

這種方式的缺點是,子類原型和父類原型共享一個對象,那么,子類如果修改原型,必然會影響父類。

(4) 臨時構(gòu)造函數(shù)

function inherit(Child, Parent) {
 var F = function(){};
 F.prototype = Parent.prototype;
 Child.prototype = new F();
}

特點:利用一個空函數(shù)F()充當(dāng)子類和父類之間的代理,既可以實現(xiàn)父類原型方法/屬性的繼承,又可以在子類原型上繼續(xù)擴展方法/屬性。

一般,我們可以利用ES5提供的新方法Object.create()來實現(xiàn)此類繼承。

Child.prototype = Object.create(Parent.prototype);

2. 通過復(fù)制屬性實現(xiàn)繼承

復(fù)制屬性分為淺拷貝深拷貝。

淺拷貝不會復(fù)制對象類型,只會簡單的將對象引用指向子類,代碼如下:

function extend(parent, child) {
 var key;
 for(key in parent) {
  if (parent.hasOwnProperty(key)){
   child[key] = parent[key];
  }
 }
 return child;
}

深拷貝會做深度復(fù)制,如果某個屬性為對象類型,那么,它會復(fù)制出該對象的屬性,再拷貝給子類。代碼如下:

function extendDeep(parent, child) {
 var key;
 for(key in parent) {
  if (parent.hasOwnProperty(key)){
   if (typeof parent[key] === 'object') {
    child[key] = (parent[key].toString() === "[object Array]")? []:{};
    extendDeep(parent[key], child[key]);
   } else {
    child[key] = parent[key];
   }
  }
 }
 return child;
}

3. "借用方法"模式復(fù)用父類函數(shù)

如果不想實現(xiàn)父子之間的完全繼承,僅僅期望子類實現(xiàn)父類中一個或多個方法,那么可以利用apply, call, bind來調(diào)用父類函數(shù),實現(xiàn)復(fù)用。

代碼如下:

parent.say.call(child, "hello, child!");

小結(jié)

推薦采用“臨時構(gòu)造函數(shù)”模式實現(xiàn)繼承。以上所述是小編給大家介紹的JavaScript如何實現(xiàn)繼承,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!

相關(guān)文章

  • blob文件流前端顯示pdf三種方法

    blob文件流前端顯示pdf三種方法

    這篇文章主要給大家介紹了關(guān)于blob文件流前端顯示pdf的三種方法,困擾我一個晚上的問題,終于解決了,文中給出了詳細的代碼示例,需要的朋友可以參考下
    2024-04-04
  • HTML+JavaScript模擬實現(xiàn)簡單的時鐘效果

    HTML+JavaScript模擬實現(xiàn)簡單的時鐘效果

    在這篇文章中,主要將向大家展示如何使用?HTML、CSS?和?JavaScript代碼制作模擬時鐘,文中的示例代碼講解詳細,感興趣的可以了解一下
    2022-08-08
  • javascript之函數(shù)進階詳解

    javascript之函數(shù)進階詳解

    這篇文章主要為大家介紹了javascript函數(shù)進階,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助<BR>
    2021-12-12
  • javascript 得到文件后綴名的思路及實現(xiàn)

    javascript 得到文件后綴名的思路及實現(xiàn)

    在上傳文件時,常常要對文件的類型即對文件的后綴名進行判斷,用javascript可以很容易的做到這一點。用Javascript解析一個帶絕對路徑的文件名并得到后綴名的方法有很多種,這里列出一種,以供參考。
    2013-07-07
  • 帶有定位當(dāng)前位置的百度地圖前端web api實例代碼

    帶有定位當(dāng)前位置的百度地圖前端web api實例代碼

    這篇文章主要介紹了帶有定位當(dāng)前位置的百度地圖前端web api實例代碼 的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • JavaScript表單驗證實現(xiàn)過程詳解

    JavaScript表單驗證實現(xiàn)過程詳解

    表單校驗是注冊環(huán)節(jié)中必不可少的操作,表單校驗通過一定的規(guī)則來確保用戶提交數(shù)據(jù)的有效性,下面這篇文章主要給大家介紹了關(guān)于el-form表單驗證的一些實用方法,需要的朋友可以參考下
    2023-01-01
  • javascript數(shù)組遍歷的方法實例分析

    javascript數(shù)組遍歷的方法實例分析

    這篇文章主要介紹了javascript數(shù)組遍歷的方法,結(jié)合實例形式分析了javascript數(shù)組遍歷及相關(guān)的some、every、filter、map等方法的使用技巧,需要的朋友可以參考下
    2016-09-09
  • java遇到微信小程序

    java遇到微信小程序 "支付驗證簽名失敗" 問題解決

    這篇文章主要介紹了java遇到微信小程序 "支付驗證簽名失敗" 問題解決,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • 微信小程序事件 bindtap bindinput代碼實例

    微信小程序事件 bindtap bindinput代碼實例

    這篇文章主要介紹了微信小程序事件 bindtap bindinput代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • Javascript實現(xiàn)多彩雪花從天降散落效果的方法

    Javascript實現(xiàn)多彩雪花從天降散落效果的方法

    這篇文章主要介紹了Javascript實現(xiàn)多彩雪花從天降散落效果的方法,可實現(xiàn)雪花飄落及散開的效果,非常炫目華麗,需要的朋友可以參考下
    2015-02-02

最新評論