国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

es6基礎(chǔ)0x018:類、繼承、重寫、超類調(diào)用

LiuRhoRamen / 2309人閱讀

摘要:要注意的是,如果要重寫構(gòu)造函數(shù),必須要在構(gòu)造函數(shù)的第一行調(diào)用父類的構(gòu)造函數(shù),在而在其他地方,則可以通過或者調(diào)用父級的變量或者方法

0x000 概述

es6真正的引入的面相對象的,以前我們總是通過其他手段來模擬這種形式,現(xiàn)在終于有了,我有點開心,又有點難過,因為在我看來,js并不是所謂的面相對象的語言,反而更偏向函數(shù)式,原型繼承是他真正的面目。面相對象不過是人們在思考問題時總結(jié)出一套有效的、大家都認同的解決問題的思路。在其他語言、各種領(lǐng)域取得成功之后,又將這種思想帶入js中,為的是將已有的經(jīng)驗可以復(fù)用到js,從而更有效的解決js中的問題。

的確,面相對象是一個很有用的思考模塊,在分解真實世界、大型項目的維護上有很大的好處,但是卻缺少了函數(shù)式的靈巧。曾經(jīng)想用完全面向?qū)ο蟮姆绞綄懸粋€redux,卻發(fā)現(xiàn)無法用這種方式寫出compose這種神奇的東西。

或許是我還沒能在面相對象和函數(shù)式之間取得一種平衡,以取得面相對象和函數(shù)式共同的優(yōu)點。

0x001 類

普通的類

class Person{}

類表達式

// 匿名類
let Person=class{}
// 具名類
let Person=class Person{}

0x001 初始化類和構(gòu)造函數(shù)

實例化類
可以使用new來調(diào)用一個類,從而實例化一個類實例

class Person{}
new Person() // Person{}

構(gòu)造函數(shù)
使用new實例化一個類實例之后,將會自動調(diào)用該類的構(gòu)造函數(shù)constructor,并且可以傳遞參數(shù)

class Person{
    constructor(name, age){
        console.log(name, age)
    }
}
new Person("jack", 23) // "jack", 23

類變量
類中可以保存一些變量,在類中,可以通過this.variable_name來訪問,在類外,可以通過instance_name.variable_name只有類實例可以訪問他們,并且每個類實例的變量都是屬于每個類實例的。

class Person {
   constructor(nickname, age){
       this.nickname = nickname
       this.age = age
   }
}
console.log(Person.nickname) // undefined
console.log(Person.age) // undefined

let person=new Person("jack",23) 
console.log(person.nickname) // "jack"
console.log(person.age) // 23

let person2=new Person("maria",11) 
console.log(person2.nickname) // "maria"
console.log(person2.age) // 11

類方法
類方法是定義在類內(nèi)部的函數(shù),可以在類內(nèi)部調(diào)用:this.function_name(params),也可以在實例上調(diào)用:instance_name.function_name(params)

class Person{
    constructor(nickname, age){
        this.nickname = nickname
        this.age =age
    }
    getNickname(){
        return this.nickname
    }
    getAge(){
        return this.age
    }
    summary(){
        return  `${this.nickname}:${this.age}`
    }
}
let person=new Person("jack", 23)
console.log(person.getNickname()) // ""jack
console.log(person.getAge()) // 23
console.log(person.summary()) // "jack:23"

靜態(tài)方法
靜態(tài)方法是可以通過類直接調(diào)用的方法,不需要實例化

class Person{
    static sayHello(){
        console.log("hello")
    }
}
Person.sayHello() // "hello"

繼承

繼承就是將父類所有的方法和都繼承下來,包括構(gòu)造函數(shù)

class Person{
        constructor(nickname, age){
            this.nickname = nickname
            this.age =age
        }
        getNickname(){
            return this.nickname
        }
        getAge(){
            return this.age
        }
        summary(){
            return  "this is Person"
        }
}
class Male extends Person {}
let  male=new Male("jack",23)
console.log(male.nickname) // "jack"
console.log(male.age) // 23
console.log(male.getNickname()) // "jack"
console.log(male.getAge()) // 23
console.log(male.summary()) // "this is Person"
0x003 重寫

有時候我們不希望一個函數(shù)的作用和父類一致,比如在上面的栗子中,male.summary()返回this is Person,不符合我們的逾期,我們希望返回this is Male,這個時候就可以用到重寫,只要寫一個和父類相同名字和函數(shù)就行了,甚至參數(shù)個數(shù)不一致也不影響

class Person{
        constructor(nickname, age){
            this.nickname = nickname
            this.age =age
        }
        getNickname(){
            return this.nickname
        }
        getAge(){
            return this.age
        }
        summary(){
            return  "this is Person"
        }
}
class Male extends Person {
    summary(){
        return  "this is Male"
    }
}
let male=new Male()
console.log(male.summary()) // this is Male
0x004 調(diào)用超類

有時候我們希望在父類的流程基礎(chǔ)上添加一些自己的邏輯,這個時候就可以用到調(diào)用超類。要注意的是,如果要重寫構(gòu)造函數(shù),必須要在構(gòu)造函數(shù)的第一行調(diào)用父類的構(gòu)造函數(shù)super(...params),在而在其他地方,則可以通過super.variable_name或者super.function_name(params)調(diào)用父級的變量或者方法

class Person{
        constructor(nickname, age){
            this.nickname = nickname
            this.age =age
        }
        getNickname(){
            return this.nickname
        }
        getAge(){
            return this.age
        }
        summary(){
            return  "this is Person"
        }
}
class Male extends Person {
    constructor(nickname, age){
        super(nickname, age)
        this.sex="male"
    }
    getSex(){
        return this.sex
    }
    summary(){
        return  super.summary()+", and this is Male"
    }
}
let male=new Male()
console.log(male.sex) // male
console.log(male.summary) //this is Person, and this is Male

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/108594.html

相關(guān)文章

  • Java? 教程(重寫和隱藏方法)

    重寫和隱藏方法 實例方法 子類中的實例方法的簽名(名稱,加上其參數(shù)的數(shù)量和類型)和返回類型與超類中的實例方法相同,將覆蓋超類的方法。 子類覆蓋方法的能力允許類從行為足夠接近的超類繼承,然后根據(jù)需要修改行為,重寫方法與它重寫的方法具有相同的名稱、數(shù)量和參數(shù)類型,以及返回類型。重寫方法還可以返回由被重寫方法返回的類型的子類型,此子類型稱為協(xié)變返回類型。 覆蓋方法時,你可能希望使用@Override注解...

    fox_soyoung 評論0 收藏0
  • Python學(xué)習(xí)之路31-繼承的利弊

    摘要:使用抽象基類顯示表示接口如果類的作用是定義接口,應(yīng)該將其明確定義為抽象基類。此外,抽象基類可以作為其他類的唯一基類,混入類則決不能作為唯一的基類,除非這個混入類繼承了另一個更具體的混入這種做法非常少見。 《流暢的Python》筆記本篇是面向?qū)ο髴T用方法的第五篇,我們將繼續(xù)討論繼承,重點說明兩個方面:繼承內(nèi)置類型時的問題以及多重繼承。概念比較多,較為枯燥。 1. 繼承內(nèi)置類型 內(nèi)置類型...

    tinylcy 評論0 收藏0
  • Java? 教程(繼承

    繼承 在前面的課程中,你已經(jīng)多次看到了繼承,在Java語言中,類可以從其他類派生,從而從這些類繼承字段和方法。 定義:從另一個類派生的類稱為子類(也是派生類,擴展類或子類),派生子類的類稱為超類(也是基類或父類)。 除了Object沒有超類,每個類都有一個且只有一個直接超類(單繼承),在沒有任何其他顯式超類的情況下,每個類都隱式地是Object的子類。 類可以從派生自類的類派生的類派生,依此類推,...

    Achilles 評論0 收藏0
  • 前端基礎(chǔ):詳解面向?qū)ο蟆?gòu)造函數(shù)、原型與原型鏈、繼承

    摘要:構(gòu)造函數(shù)創(chuàng)建對象為了能夠判斷實例與對象的關(guān)系,我們就使用構(gòu)造函數(shù)來搞定。像和這樣的原生構(gòu)造函數(shù),在運行時自動出現(xiàn)在執(zhí)行環(huán)境中。 大綱: 一、理解對象 1.1 屬性類型 1.2 屬性方法 二、創(chuàng)建對象 2.1 簡單方式創(chuàng)建 2.2 工廠模式 2.3 構(gòu)造函數(shù) 2.4 原型 三、繼承 3.1 原型鏈 3.2 借用構(gòu)造函數(shù) 3.3 組合繼承(原型鏈+借用構(gòu)造函數(shù)) 3....

    MartinDai 評論0 收藏0
  • Java的加載機制

    摘要:如果需要支持類的動態(tài)加載或需要對編譯后的字節(jié)碼文件進行解密操作等,就需要與類加載器打交道了。雙親委派模型,雙親委派模型,約定類加載器的加載機制。任何之類的字節(jié)碼都無法調(diào)用方法,因為該方法只能在類加載的過程中由調(diào)用。 jvm系列 垃圾回收基礎(chǔ) JVM的編譯策略 GC的三大基礎(chǔ)算法 GC的三大高級算法 GC策略的評價指標 JVM信息查看 GC通用日志解讀 jvm的card table數(shù)據(jù)...

    aervon 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<