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

資訊專欄INFORMATION COLUMN

ES6的Class學(xué)習(xí)

AJie / 3331人閱讀

摘要:另外只有調(diào)用之后,才可以使用關(guān)鍵字正確子類的屬性和的靜態(tài)方法,在一個方法前面,加上關(guān)鍵字,就表示該方法不會被實例繼承,但是可以被子類繼承但是可以被子類繼承,也可從上調(diào)用

初識Class

傳統(tǒng)的寫法

function Point(x, y) {
    this.x = x
    this.y = y
}

Point.prototype.toString = () => {
    return `( ${this.x}, ${this.y} )`
}

ES6為了更接近面向?qū)ο蟮木幊谭绞剑峁┝薈lass的概念

class Point {
    constructor (x, y) {
        this.x = x
        this.y = y
    }
    
    toString {
        return `( ${this.x}, ${this.y} )`
    }
}

上面定義了一個‘類’,一個構(gòu)造方法constructor,this是實例對象,一個toString方法(注意沒有function這個保留字)

class類中的方法(除constructor之外)其實都定義在類的prototype屬性上

// 比如toString(),相當(dāng)于
Point.prototype = {
    toString(){}
}

// 所以類的新方法可以這樣添加進去
Object.assign(Point.prototype, {
    toString(){},
    toValue(){}
})

Point.prototype.constructor === Point // true
構(gòu)造方法和實例對象

通過new命令生成對象實例時都默認(rèn)自動調(diào)用constructor方法,一個類必須有constructor方法,沒有顯式定義的話,一個空的con方法會被默認(rèn)添加

constructor () {}

該方法默認(rèn)返回實例對象(就是this),但是可以指定返回另一個對象

class Foo {
    constructor {
        return Object.create(null)
    }
}
new Foo() instanceof Foo // false

實例對象的創(chuàng)建同之前一樣

class Point {
    // 這里為了縮小工作量,沒有全部書寫
    constructor () {}
    tostring () {}
}

let point = new Point(2, 3)
point.toString() // (2, 3)

point.hasOwnProperty("x") // true,因為該實例屬性顯式的定義在this上
point.hasOwnProperty("toString") // false,因為方法都是定義在原型上的
point.prototype.hasOwnProperty("toString") // true

point._proto_ === Point.prototype // true

ES6的Class只是ES5的構(gòu)造函數(shù)的一層包裝,所以繼承了函數(shù)的許多屬性,包括name屬性

class Point {} 
Point.name // "Point"

class不存在變量提升

new Foo() // ReferenceError
class Foo {}

// let Foo = class {}
// class Bar extends Foo {}
// 因為class沒有提升,所以上面代碼不會報錯
class的繼承
class childPoint extends Point {
    constructor(x, y, color) {
        super(x, y)
        this.color = color
    }
    
    toString() {
        return this.color + "" + super.toString() // 等于Parent.toString()
    }
}

子類必須在constructor方法中調(diào)用super方法,否則新建實例會出錯。另外只有調(diào)用super之后,才可以使用this關(guān)鍵字

class Point{}
class childPoint extends Point{
    constructor (x, y, color) {
        this.color = color // ReferenceError
        super(x, y)
        this.color = color // 正確
    }
    
}
let cp = new childPoint() // ReferenceError

子類的_proto_屬性

class B extends A {
}

B._prototype_ === A // true
B.prptotype._proto_ === A.prototype // true

Object.getPrototypeof(B) === A // true

getter和setter

class MyClass {
    get prop() {
        return "getter"
    }
    set prop(value) {
        console.log("setter:" + value )
    }
}

let inst = new MyClass()

inst.prop = 123 // setter: 123
inst.prop // "getter"

Class的靜態(tài)方法,在一個方法前面,加上static關(guān)鍵字,就表示該方法不會被實例繼承,但是可以被子類繼承

class Foo {
    static classMethod () {
        return "hello"
    }
}

Foo.classMethod() // hello

let foo = new Foo()

foo.classMethod() // TypeError: undefined is not a function

// 但是可以被子類繼承,也可從super上調(diào)用
class Bar extends Foo {
    // static classMethod() {
        // return super.classMethod() + ", too"
    // }
}
Bar.classMethod() // hello

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

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

相關(guān)文章

  • ES6學(xué)習(xí)總結(jié)(三)

    摘要:不同于其他面向?qū)ο笳Z言,以前的中中沒有類的概念,主要是通過原型的方式來實現(xiàn)繼承,中引入了原型鏈,并且將原型鏈用來實現(xiàn)繼承,其核心是利用原型使得一個對象繼承另一個對象的方法和屬性,中原型繼承的關(guān)鍵是將一個實例的原型對象指向另一個實例,因此前一 不同于其他面向?qū)ο笳Z言,ES6以前的JavaScript中中沒有class類的概念,主要是通過原型的方式來實現(xiàn)繼承,JavaScript中引入了原...

    baoxl 評論0 收藏0
  • [譯] 在你學(xué)習(xí) React 之前必備 JavaScript 基礎(chǔ)

    摘要:前言在理想的狀態(tài)下,你可以在深入了解之前了解和開發(fā)的所有知識。繼承另一個類的類,通常稱為類或類,而正在擴展的類稱為類或類。這種類型的組件稱為無狀態(tài)功能組件。在你有足夠的信心構(gòu)建用戶界面之后,最好學(xué)習(xí)。 原文地址:JavaScript Basics Before You Learn React 原文作者: Nathan Sebhastian 寫在前面 為了不浪費大家的寶貴時間,在開...

    Chaz 評論0 收藏0
  • ES6學(xué)習(xí)4》Class

    摘要:語言傳統(tǒng)方法通過構(gòu)造函數(shù)定義并生成新對象,引入了這個概念作為對象的模板,通過關(guān)鍵字可以定義類。基本語法等同于上面的代碼表明,類的數(shù)據(jù)類型就是函數(shù),類本身指向構(gòu)造函數(shù)。屬性引入了屬性,在構(gòu)造函數(shù)中返回命令所作用的構(gòu)造函數(shù)。 JS語言傳統(tǒng)方法通過構(gòu)造函數(shù)定義并生成新對象,ES6引入了Class這個概念作為對象的模板,通過class關(guān)鍵字可以定義類。 基本語法 function Point(...

    seal_de 評論0 收藏0
  • ES6學(xué)習(xí)筆記之Classes

    摘要:靜態(tài)方法靜態(tài)方法直接用類名來調(diào)用就可以了,熟悉面向?qū)ο缶幊痰耐瑢W(xué)應(yīng)該都不陌生。在中,一個類不能繼承多個類。為了解決這個問題,可以使用。當(dāng)類表達式有命名時,該命名僅作為類內(nèi)部使用。 本文同步自我得博客:http://www.joeray61.com 簡介 ES6的Classes是在原型鏈繼承的基礎(chǔ)上,由語言本身提供的語法糖,并非是一種全新的繼承模式。這使得Javascript有一種更加簡...

    MSchumi 評論0 收藏0

發(fā)表評論

0條評論

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