ES6 提供了更接近传统语言的写法,引入了 Class(类)这个概念,作为对象的模板。通过 class 关键字,可以定义类。基本上,ES6 的 class 可以看作只是 一个语法糖,它的绝大部分功能,ES5 都可以做到,新的 class 写法只是让对象 原型的写法更加清晰、更像面向对象编程的语法而已。
image.png
image.png

ES5实例化构造函数 & ES6 Class

  1. class 声明类
  2. constructor 定义构造函数初始化

image.png

ES5 & Class 静态成员

静态成员 : 直接给构造函数添加的成员称为静态成员,不能使用实例对象的方式来调用,只能使用构造函数来调用

  1. static 定义静态方法和属性
  2. 父类的静态方法可以被子类继承

image.png

ES5构造函数继承

  1. //手机
  2. function Phone(brand, price){
  3. this.brand = brand;
  4. this.price = price;
  5. }
  6. Phone.prototype.call = function(){
  7. console.log("我可以打电话");
  8. }
  9. //智能手机
  10. function SmartPhone(brand, price, color, size){
  11. Phone.call(this, brand, price);
  12. this.color = color;
  13. this.size = size;
  14. }
  15. //设置子级构造函数的原型
  16. SmartPhone.prototype = new Phone;
  17. SmartPhone.prototype.constructor = SmartPhone;
  18. //声明子类的方法
  19. SmartPhone.prototype.photo = function(){
  20. console.log("我可以拍照")
  21. }
  22. SmartPhone.prototype.playGame = function(){
  23. console.log("我可以玩游戏");
  24. }
  25. const chuizi = new SmartPhone('锤子',2499,'黑色','5.5inch');
  26. chuizi.call();//我可以打电话 (继承父类的方法)
  27. console.log(chuizi);

image.png

ES6类的继承 extends 和 对父类方法重写

  1. extends 继承父类
  2. super(brand, price) 相当于ES5中 Phone.call(this, brand, price)
  3. super 调用父级构造方法 super.call();
  4. 父类方法可以重写 ```javascript class Phone{ //构造方法 constructor(brand, price){
     this.brand = brand;
     this.price = price;
    
    } //父类的成员属性 call(){
     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(); //我可以打电话!! (通过原型链调用父类方法) ``` image.png