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改寫爲:es6
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)類的聲明this
先聲明一個最簡單的Animal類,類裏只有一個print方法,方法中打印出傳遞的參數。es5
class Animal{
print(val){
console.log(val);
}
}
(2)類的使用spa
咱們已經聲明瞭一個類,並在類裏聲明瞭print方法,如今要實例化類,並使用類中的方法。prototype
class Animal{ print(val){ console.log(val); } } let p= new Animal(); p.print('熊貓');
輸出結果爲:熊貓。3d
(2.1)類的多方法聲明code
咱們在上述基礎上在聲明一個eat方法。對象
class Animal{ print(val){ console.log(val); } eat(val){ console.log(this.print("熊貓"),"eat===>",val) } } let panda= new Animal(); panda.eat("竹子")
此時咱們會發現輸出的結果爲:blog
也就是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("國歌")
輸出結果爲:
未完,待續。。。。