最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript中常見的幾種繼承方式

 更新時間:2022年06月24日 08:50:31   作者:??遠(yuǎn)方的小草????  
這篇文章主要介紹了JavaScript中常見的幾種繼承方式,繼承可以訪問父類原型上的方法或?qū)傩裕瑢?shí)現(xiàn)了方法復(fù)用,但是創(chuàng)建子類實(shí)例時,不能傳父類的參數(shù),子類實(shí)例共享了父類構(gòu)造函數(shù)的屬性值

原型繼承

function Parent(name) {
  this.name = name
}
Parent.prototype.getName = function(){
  return 'parentPrototype' + ' ' + this.name;
}
function Son() {
}
Son.prototype = new Parent();
console.log(new Son())

內(nèi)存圖

分析

原型繼承的原理就是把子類的prototype指向父類的實(shí)例身上,這樣做,子類就可以使用父類的屬性和方法了,但是,無法初始化父類的屬性,這個時候,盜用構(gòu)造函數(shù)繼承就出現(xiàn)了

盜用構(gòu)造函數(shù)繼承

function Parent(name) {
  this.name = name
}
Parent.prototype.getName = function(){
  return 'parentPrototype' + ' ' + this.name;
}
function Son(name) {
  Parent.call(this, name)
}

console.log(new Son('jack'))

分析

盜用構(gòu)造函數(shù)的原理簡單理解就是吧父類函數(shù)的代碼 copy 到子類里面,在上述代碼中相當(dāng)于把父類的this.name = name 在子類里執(zhí)行了一次,這樣的話,就可以在子類實(shí)例化的時候初始化父類的一些屬性

如果這樣的話就取不到父類原型身上的方法了,為了解決這個問題,組合繼承就出現(xiàn)了

組合繼承

function Parent(name) {
  this.name = name
}
Parent.prototype.getName = function(){
  return 'parentPrototype' + ' ' + this.name;
}
function Son(name) {
  Parent.call(this, name) // 第二次調(diào)用
}
Son.prototype = new Parent() // 第一次調(diào)用
console.log(new Son('jack'))

組合繼承,也稱為偽經(jīng)典繼承,結(jié)合了原型繼承和盜用構(gòu)造函數(shù)繼承,既可以初始化父類的方法,又可以取到父類的原型身上的方法

可以看到這種繼承方式name會被多次創(chuàng)建,雖然在使用上沒什么區(qū)別,但是會多開辟一些無用內(nèi)存,而且還會多調(diào)用一次函數(shù)

原型鏈繼承

const parent = {
  name: 'jack',
  getName() {
    return this.name
  }
}
const son = Object.create(parent)
console.log(son)

這種繼承適用于想在一個對象的基礎(chǔ)上添加一個新的對象,這個新的對象可以有自己獨(dú)立的屬性

還可以有自己的屬性:

const parent = {
  name: 'jack',
  getName() {
    return this.name
  }
}
const son = Object.create(parent, {
  age: {
    value: 18,
    enumerable: true,
    writable: true,
    configurable: true
  }
})
console.log(son)

寄生式繼承

const parent = {
  name: 'jack',
  getName() {
    return this.name
  }
}
function createObj(origin){
  const res = Object(origin);
  res.age = 18;
  res.getAge = function() {
    return this.age
  };
  return res
}
const son = createObj(parent)
console.log(son)

寄生式繼承就是類似于工廠模式,經(jīng)過它創(chuàng)建的函數(shù),會有一些自帶的值

寄生組合式繼承

function Parent(name) {
  this.name = name;
}
Parent.prototype.getName = function () {
  return this.name;
}
function Son(name) {
  Parent.call(this, name)
};
function inhertPrototype(Son, Parent) {
  const res = Object(Parent.prototype); // 創(chuàng)建目標(biāo)對象的原型對象
  // 可以理解為復(fù)制父類對象prototype的屬性,這樣做可以少調(diào)用一次父類的實(shí)例化操作
  res.constructor = Son // 將構(gòu)造函數(shù)指向son
  Son.prototype = res //將子類的prototype 指向父類創(chuàng)建的原型對象,這樣子類既可以使用父類的方法,又不用實(shí)例化父類
}
inhertPrototype(Son, Parent)
console.log(new Son('jack'))

寄生組合式繼承 被稱為最佳繼承模式 他解決了組合繼承父類函數(shù)被調(diào)用兩次的問題,同時又不會給子類的prototype 加上父類的無用的屬性

 可以對比組合繼承的圖看一下,prototype 上少了 name ,最佳的繼承方式

到此這篇關(guān)于JavaScript中常見的幾種繼承方式的文章就介紹到這了,更多相關(guān)js繼承方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • js無痛刷新Token的實(shí)現(xiàn)

    js無痛刷新Token的實(shí)現(xiàn)

    本文主要介紹了js無痛刷新Token的實(shí)現(xiàn),文中根據(jù)實(shí)例編碼詳細(xì)介紹的十分詳盡,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • layui(1.0.9)文件上傳upload,前后端的實(shí)例代碼

    layui(1.0.9)文件上傳upload,前后端的實(shí)例代碼

    今天小編就為大家分享一篇layui(1.0.9)文件上傳upload,前后端的實(shí)例代碼,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-09-09
  • JavaScript解決跨域的三種方法小結(jié)

    JavaScript解決跨域的三種方法小結(jié)

    在Web應(yīng)用中,當(dāng)一個網(wǎng)頁的腳本試圖去請求另一個域名下的資源時,就會遇到跨域問題,跨域問題是由瀏覽器的同源策略所引起的,本文給大家介紹了JavaScript解決跨域的三種方法,需要的朋友可以參考下
    2024-03-03
  • 詳解tween.js 中文使用指南

    詳解tween.js 中文使用指南

    本篇文章主要介紹了詳解tween.js 中文使用指南,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-01-01
  • D3.js實(shí)現(xiàn)直方圖的方法詳解

    D3.js實(shí)現(xiàn)直方圖的方法詳解

    直方圖在我們平常的時候經(jīng)常見到,那么這篇文章給大家介紹了下如何使用D3.js實(shí)現(xiàn)直方圖,文中通過實(shí)例介紹的很詳細(xì),有需要的朋友們可以參考借鑒。
    2016-09-09
  • uniapp中使用videojs構(gòu)建H5直播播放器

    uniapp中使用videojs構(gòu)建H5直播播放器

    這篇文章主要為大家介紹了uniapp中使用videojs構(gòu)建H5直播播放器實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-06-06
  • JavaScript裝飾者模式原理與用法實(shí)例詳解

    JavaScript裝飾者模式原理與用法實(shí)例詳解

    這篇文章主要介紹了JavaScript裝飾者模式原理與用法,結(jié)合實(shí)例形式總結(jié)分析了JavaScript裝飾者模式相關(guān)概念、功能、原理、用法及操作注意事項(xiàng),需要的朋友可以參考下
    2020-03-03
  • JS實(shí)現(xiàn)的不規(guī)則TAB選項(xiàng)卡效果代碼

    JS實(shí)現(xiàn)的不規(guī)則TAB選項(xiàng)卡效果代碼

    這篇文章主要介紹了JS實(shí)現(xiàn)的不規(guī)則TAB選項(xiàng)卡效果代碼,基于鼠標(biāo)事件動態(tài)設(shè)置頁面元素樣式實(shí)現(xiàn)該效果,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-09-09
  • uniapp實(shí)現(xiàn)人臉識別功能的具體實(shí)現(xiàn)代碼

    uniapp實(shí)現(xiàn)人臉識別功能的具體實(shí)現(xiàn)代碼

    最近在使用uniapp開發(fā)項(xiàng)目,有刷臉實(shí)名認(rèn)證的需求,下面這篇文章主要給大家介紹了關(guān)于uniapp實(shí)現(xiàn)人臉識別功能的具體實(shí)現(xiàn),文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-12-12
  • js實(shí)現(xiàn)數(shù)組冒泡排序、快速排序原理

    js實(shí)現(xiàn)數(shù)組冒泡排序、快速排序原理

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)數(shù)組冒泡排序、快速排序的原理,感興趣的小伙伴們可以參考一下
    2016-03-03

最新評論

广河县| 顺平县| 桃园市| 龙海市| 甘肃省| 东乌| 宝应县| 竹溪县| 拉萨市| 旺苍县| 南部县| 平潭县| 建宁县| 东明县| 闽侯县| 无极县| 江达县| 岳阳市| 清流县| 阳原县| 青神县| 承德市| 平塘县| 鸡西市| 罗平县| 宁远县| 北京市| 东平县| 磐石市| 湘阴县| 城市| 岳西县| 永德县| 万荣县| 镇坪县| 东宁县| 米林县| 南昌县| 凭祥市| 呼图壁县| 淮阳县|