ES6系列_15之class類的使用
阿新 • • 發佈:2018-12-08
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("國歌")
輸出結果為:
未完,待續。。。。