ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是 一个语法糖,它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象 原型的写法更加清晰、更像面向对象编程的语法而已。 
ES5实例化构造函数 & ES6 Class
- class 声明类
- constructor 定义构造函数初始化
ES5 & Class 静态成员
静态成员 : 直接给构造函数添加的成员称为静态成员,不能使用实例对象的方式来调用,只能使用构造函数来调用
- static 定义静态方法和属性
- 父类的静态方法可以被子类继承
ES5构造函数继承
//手机function Phone(brand, price){this.brand = brand;this.price = price;}Phone.prototype.call = function(){console.log("我可以打电话");}//智能手机function SmartPhone(brand, price, color, size){Phone.call(this, brand, price);this.color = color;this.size = size;}//设置子级构造函数的原型SmartPhone.prototype = new Phone;SmartPhone.prototype.constructor = SmartPhone;//声明子类的方法SmartPhone.prototype.photo = function(){console.log("我可以拍照")}SmartPhone.prototype.playGame = function(){console.log("我可以玩游戏");}const chuizi = new SmartPhone('锤子',2499,'黑色','5.5inch');chuizi.call();//我可以打电话 (继承父类的方法)console.log(chuizi);
ES6类的继承 extends 和 对父类方法重写
- extends 继承父类
- super(brand, price) 相当于ES5中 Phone.call(this, brand, price)
- super 调用父级构造方法 super.call();
- 父类方法可以重写
```javascript
class Phone{
//构造方法
constructor(brand, price){
} //父类的成员属性 call(){this.brand = brand; this.price = price;
} }console.log("我可以打电话!!");
class SmartPhone extends Phone { //构造方法 constructor(brand, price, color, size){ super(brand, price);// Phone.call(this, brand, price) this.color = color; this.size = size; }
photo(){
console.log("拍照");
}
playGame(){
console.log("玩游戏");
}
myCall(){
console.log('我可以进行视频通话');
}
parentCall(){
//调用父类的方法
super.call();
}
call(){
//重写父类方法
//如果不重写, 则下方实例调用XX.call() 该处调用的是父类的方法->(我可以打电话!!)
//重写后还想调用父类方法通过原型链 : xiaomi.__proto__.__proto__.call();
console.log('我重写了父类方法');
}
}
const xiaomi = new SmartPhone(‘小米’,799,’黑色’,’4.7inch’); console.log(xiaomi); xiaomi.myCall(); //我可以进行视频通话 xiaomi.parentCall(); //我可以打电话!!
xiaomi.call(); //我重写了父类方法!! (重写父类方法的子类函数)
xiaomi.proto.proto.call(); //我可以打电话!! (通过原型链调用父类方法)
```

