ES5 和 ES6 在類和繼承的不一樣,舉例以下:函數
ES5 的類和繼承: function Person(name){ this.name = name; } Person.prototype.showName = function(){ return this.name; }; var ops = new Person('娃哈哈'); console.log(ops.showName()); // 娃哈哈
ES6 的類和繼承: class Person{ // Person類 它也是一個函數 constructor(name){ // 構造函數 this.name = name; } showName(){ return this.name; } } var p1 = new Person('娃哈哈'); console.log(p1.showName()); // 娃哈哈
Class 能夠經過 extends 關鍵字實現繼承,這比 ES5 的經過修改原型鏈實現繼承,要清晰和方便不少,舉例以下:學習
ES5 以前的寫法: function Person(name){ // 父類 this.name = name; } Person.prototype.showName = function(){ return this.name; }; function SubPerson(name,job){ // 子類 Person.call(this,name); // 子類繼承父類的屬性 須要將this指向父類中的name this.job = job; // job是子類本身的屬性 } SubPerson.prototype = new Person(); // 子類繼承父類的方法 var p1 = new SubPerson('娃哈哈'); console.log(p1.name); // 娃哈哈 // console.log(p1.showName()); // 娃哈哈
ES6 有Class類以後的寫法: class Person{ constructor(name){ this.name = name; } showName(){ return this.name; } } class SubPerson extends Person{ constructor(name,job){ super(name); // 指向父類的構造函數 this.job = job; } showJob(){ return this.job; } } var p1 = new SubPerson('娃哈哈','喜洋洋'); console.log(p1.name); // 娃哈哈 // console.log(p1.showName()); // 娃哈哈 // console.log(p1.job); // 喜洋洋
estends 就是繼承的意思,super 就是指向父類的構造函數,指代了整個prototype對象或者_proto_指針指向的對象。this
super.showName