1. 程式人生 > >ES6系列_15之class類的使用

ES6系列_15之class類的使用

JS語言的傳統方法是通過建構函式,定義並生成新物件,是一種基於原型的面向物件系統。在ES6中新增加了類的概念,可以使用 class 關鍵字宣告一個類,之後以這個類來例項化物件。
1.先來看看es5與es6的寫法:
(1)建構函式示例:
const Animal = function (name, age) {
    this.name= name;
    this.age = age;
    return this;
};

Animal.prototype = {
    constructor: Animal,
    print: function () {
        console.log(
this.name+ ' ' + this.age); } }; const panda= new Animal('熊貓', '3').print();

 (2)使用ES6提供的class改寫為:

class Animal {
    constructor(name,age){
        this.name=name;
        this.age=age;
        return this;
    }

    print(){
        console.log(this.name+''+this.age);
    }
}

const panda
=new Animal('熊貓', '3'); panda.print()

2.現在來看看es6的類如何使用?

(1)類的宣告

先宣告一個最簡單的Animal類,類裡只有一個print方法,方法中打印出傳遞的引數。

class Animal{
    print(val){
        console.log(val);
    }
}

(2)類的使用

我們已經聲明瞭一個類,並在類裡聲明瞭print方法,現在要例項化類,並使用類中的方法。

class Animal{
    print(val){
        console.log(val);
    }
}
let p
= new Animal(); p.print('熊貓');

輸出結果為:熊貓。

    (2.1)類的多方法宣告

我們在上述基礎上在宣告一個eat方法。

class Animal{
    print(val){
        console.log(val);
    }
    eat(val){
        console.log(this.print("熊貓"),"eat===>",val)
    }
}
let panda= new Animal();

panda.eat("竹子")

此時我們會發現輸出的結果為:

也就是this.print("熊貓") 這句程式碼出現了undefined。這是為啥呢?

這是由於類中的print方法沒有返回值造成的,我們給print方法返回值,程式碼如下:

class Animal{
    print(val){
        console.log(val);
        return val;
    }
    eat(val){
        console.log(this.print("熊貓"),"eat===>",val)
    }
}
let panda= new Animal();

panda.eat("竹子")

此時的結果為:

這裡需要注意的是兩個方法中間不要寫逗號了,還有這裡的this指類本身,還有 使用return返回值。

(3) 類的傳參

在類的引數傳遞中我們用constructor( )進行傳參。傳遞引數後可以直接使用this.xxx進行呼叫。

 例如一開始時我們改寫的程式碼一樣,現在再把該程式碼貼出如下:

class Animal {
    constructor(name,age){
        this.name=name;
        this.age=age;
        return this;
    }

    print(){
        console.log(this.name+''+this.age);
    }
}

const panda=new Animal('熊貓', '3');
panda.print()

使用constructor來約定了傳遞引數,然後在print方法中列印。

(4)class的繼承

類的一大特點就是繼承。ES6中也有繼承,使用關鍵子extends

例如,現在有一個動物,除了基本的姓名與年齡外,還有獨特的愛好--唱歌,我們該怎麼處理呢,這裡用到了類的繼承,程式碼如下:

class Bird extends Animal{
    sing(val){
        console.log("唱",val)
    }
}

let bird=new Bird("鸚鵡",3)
bird.sing("國歌")

輸出結果為:

未完,待續。。。。