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

JavaScript中的常見繼承總結(jié)

 更新時(shí)間:2022年09月21日 08:54:13   作者:陸榮濤  
這篇文章主要介紹了JavaScript中的常見繼承總結(jié),繼承其實(shí)就是構(gòu)造函數(shù)和構(gòu)造函數(shù)之間的一種關(guān)系,更多相關(guān)介紹,需要的小伙伴可以參考下面文章內(nèi)容

前言

我們?cè)趯W(xué)習(xí)前端的過程中一定會(huì)遇到繼承這個(gè)問題

繼承其實(shí)就是構(gòu)造函數(shù)和構(gòu)造函數(shù)之間的一種關(guān)系

當(dāng)一個(gè)構(gòu)造函數(shù)A的實(shí)例使用構(gòu)造函數(shù)B身上的屬性和方法,這個(gè)時(shí)候我們就說構(gòu)造函數(shù)A繼承至構(gòu)造函數(shù)B。

我們一般把構(gòu)造函數(shù)A稱之為子類,構(gòu)造函數(shù)B稱之為父類。

想要弄明白繼承就要先弄明白原型鏈

原型鏈

  function Person() {
            // 屬性
            this.name = 'Jack'
            this.age = 18
            this.gender = '男'
        }
		// 實(shí)例
        const p = new Person()


        // 1.p 的 __proto__ 指向了誰?
        console.log(p.__proto__ === Person.prototype)

        // 2.Person 的 __proto__ 指向了誰 ?
        console.log(Person.__proto__ === Function.prototype)

        // 3.Person.prototpye 的 __proto__ 指向了誰 ?
        console.log(Person.prototype.__proto__ === Object.prototype)

        // 4.Function.prototype 的 __proto__ 指向了誰 ?
        console.log(Function.prototype.__proto__ === Object.prototype)

        // 5.Function 的 __proto__ 指向了誰 ?
        console.log(Object.prototype.__proto__)

        // 6.Object.prototype 的 __proto__ 指向了誰 ?
        console.log(Function.__proto__ === Function.prototype)

        // 7.Object 的 __proto__ 指向了誰 ?
        console.log(Object.__proto__ === Function.prototype)

常用的繼承方法

我們?cè)诿嬖嚮蛘唛_發(fā)過程中使用做多的繼承有:

  • 原型繼承
  • 原型鏈繼承
  • 組合繼承

當(dāng)然還有一些別的繼承,其它的繼承相對(duì)于上面的三種情況使用的就少了很多:

主要介紹上面的三種繼承

原型繼承

原理

  • 原型繼承的核心原理:子類的原型指向父類的實(shí)例
  • 這個(gè)也可以理解成把父類的實(shí)例賦值給子類的原型對(duì)象

優(yōu)點(diǎn)

  • 父類構(gòu)造函數(shù)體內(nèi)的屬性和原型上的方法都可以實(shí)現(xiàn)繼承

缺點(diǎn)

  • 繼承下來的屬性不在自己身上, 在自己的原型上
  • 一個(gè)構(gòu)造函數(shù)的實(shí)例, 需要在兩個(gè)地方傳遞參數(shù)
  • 所有子類的實(shí)例, name 和 age 一模一樣
 ? ? ? ?// 父類
 ? ? ? ?function Person(name, age) {
 ? ? ? ? ? ?//屬性
 ? ? ? ? ? ?this.name = name
 ? ? ? ? ? ?this.age = age
 ? ? ?  }
        // 方法
 ? ? ? ?Person.prototype.paly = function () { console.log('玩游戲'); }
?
 ? ? ? ?// 子類
 ? ? ? ?function Students(classRoom) {
 ? ? ? ? ? ?// 屬性
 ? ? ? ? ? ?this.classRoom = classRoom
 ? ? ?  }
?
 ? ? ? ?// 把子類的原型指向父類的實(shí)例對(duì)象
 ? ? ? ?// 把父類的實(shí)例賦值給子類的原型(原型對(duì)象)
 ? ? ? ?// 創(chuàng)建一個(gè)父類的實(shí)例
 ? ? ? ?const p = new Person('Jack', 25)
 ? ? ? ?// 子類的實(shí)例指向父類的原型對(duì)象
 ? ? ? ?Students.prototype = p
?
 ? ? ? // 實(shí)例化一個(gè)對(duì)象
 ? ? ? let s = new Students('高級(jí)1班')
 ? ? ? console.log(s);
 ? ? ? let s1 = new Students('高級(jí)2班')
 ? ? ? console.log(s1);

執(zhí)行結(jié)果

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

原理

  • 把我們的父類夠構(gòu)造函數(shù)當(dāng)做普通函數(shù)在子類構(gòu)造函數(shù)體內(nèi)調(diào)用
  • 利用 call 方法改變函數(shù)內(nèi)的 this 指向

優(yōu)點(diǎn)

  • 子類的所有繼承下來的屬性都在自己身上
  • 子類的所有參數(shù)在一個(gè)地方傳遞
  • 子類的所有實(shí)例都可以給繼承下來的屬性賦不一樣的值

缺點(diǎn)

父類的原型上的方法沒有繼承下來:

// 父類
function Person(name, age) {
    // 屬性
    this.name = name
    this.age = age
}
// 原型對(duì)象上添加一個(gè)方法
Person.prototype.paly = function () { console.log('玩游戲'); }
// 子類
function Students(name, age,classRoom) {
    this.classRoom = classRoom
    // 因?yàn)檫@個(gè)this指向的就是子類的實(shí)例
    Person.call(this, name, age)
}
// 實(shí)例化一個(gè)對(duì)象
let s = new Students('張三',25,'高級(jí)1班')
console.log(s);
let s1 = new Students('李四',20,'高級(jí)2班')
console.log(s1);

執(zhí)行結(jié)果

組合繼承

原理

  • 把 原型繼承 和 借用構(gòu)造函數(shù) 繼承放在一起使用

優(yōu)點(diǎn)

  • 把原型繼承 和 借用構(gòu)造函數(shù)繼承放在一起使用
  • 既達(dá)到了全都繼承下來又能把屬性繼承在自己身上

缺點(diǎn)

子類的原型上有一套多余的屬性:

// 父類
function Person(name, age) {
 ? ?// 屬性
 ? ?this.name = name
 ? ?this.age = age
}
// 原型對(duì)象上添加一個(gè)方法
Person.prototype.paly = function () { console.log('玩游戲'); }
// 子類
function Students(name, age,classRoom) {
 ? ?this.classRoom = classRoom
 ? ?// 借用構(gòu)造函數(shù)繼承
 ? ?Person.call(this, name, age)
}
// 原型繼承
// 主要的目的就是為了使用父類身上的方法
Students.prototype = new Person()
?
// 實(shí)例化一個(gè)對(duì)象
let s = new Students('張三',25,'高級(jí)1班')
console.log(s);
?
let s1 = new Students('王五',24,'高級(jí)2班')
console.log(s1);
s1.play()

執(zhí)行結(jié)果

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

相關(guān)文章

  • javascript實(shí)現(xiàn)數(shù)字驗(yàn)證碼的簡(jiǎn)單實(shí)例

    javascript實(shí)現(xiàn)數(shù)字驗(yàn)證碼的簡(jiǎn)單實(shí)例

    本篇文章主要是對(duì)javascript實(shí)現(xiàn)數(shù)字驗(yàn)證碼的簡(jiǎn)單實(shí)例進(jìn)行了介紹,需要的朋友可以過來參考下,希望對(duì)大家有所幫助
    2014-02-02
  • 百度前臺(tái)js筆試題與答案

    百度前臺(tái)js筆試題與答案

    百度前臺(tái)js筆試題與答案...
    2007-09-09
  • 原生js編寫autoComplete插件

    原生js編寫autoComplete插件

    這篇文章主要為大家詳細(xì)介紹了原生js編寫的autoComplete插件,感興趣的小伙伴們可以參考一下
    2016-04-04
  • 微信小程序?qū)崿F(xiàn)定位及到指定位置導(dǎo)航的示例代碼

    微信小程序?qū)崿F(xiàn)定位及到指定位置導(dǎo)航的示例代碼

    這篇文章主要介紹了微信小程序?qū)崿F(xiàn)定位及到指定位置導(dǎo)航的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • JS組件封裝之監(jiān)聽localStorage的變化

    JS組件封裝之監(jiān)聽localStorage的變化

    這篇文章主要介紹了JS組件封裝之監(jiān)聽localStorage的變化,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09
  • js原生實(shí)現(xiàn)FastClick事件的實(shí)例

    js原生實(shí)現(xiàn)FastClick事件的實(shí)例

    下面小編就為大家?guī)硪黄猨s原生實(shí)現(xiàn)FastClick事件的實(shí)例。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • js實(shí)現(xiàn)計(jì)算器功能

    js實(shí)現(xiàn)計(jì)算器功能

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • Bootstrap每天必學(xué)之媒體對(duì)象

    Bootstrap每天必學(xué)之媒體對(duì)象

    Bootstrap每天必學(xué)之媒體對(duì)象,對(duì)BootBootstrap每天必學(xué)之媒體對(duì)象小編也了解的很少,希望通過這篇文章和大家更多的去學(xué)習(xí)Bootstrap每天必學(xué)之媒體對(duì)象,從中得到收獲。
    2015-11-11
  • 使用js簡(jiǎn)單實(shí)現(xiàn)了tree樹菜單

    使用js簡(jiǎn)單實(shí)現(xiàn)了tree樹菜單

    使用js簡(jiǎn)單實(shí)現(xiàn)了樹菜單!具體實(shí)現(xiàn)實(shí)例代碼如下,相信自己你一定可以實(shí)現(xiàn)的更好
    2013-11-11
  • 如何在微信小程序中使用骨架屏的步驟

    如何在微信小程序中使用骨架屏的步驟

    這篇文章主要介紹了如何在微信小程序中使用骨架屏的步驟,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-06-06

最新評(píng)論