class

class

  • 实际上是一个function,但不存在函数提升

    • 同样可以通过两种方式定义

      class User{

      }
      //或者
      var User = class {
         
      }
  • 在其中通过构造函数声明属性,可以通过计算属性声明

    constructor(name, email) {
       this.name = name;
       this.email = email;
    }
  • 创建类对象

    var student1 = new User('ashen', 'ashen@ashen.com');
  • 在其中声明方法

    website(){
       console.log(`http://${this.email}`)
    }
    //所有通过此类创建的对象都可以调用
  • 声明静态方法

    • 只能被类调用,不能被实例对象调用的方法

      static describtion(){
         console.log('I am a user of QQ')
      }
  • set和get

    set address(value){
       this.info = value
    }
    get address(){
       return this.info;
    }
    • 通过类.属性 = ...的方式为其设置值

    • 通过类.属性的方式获取值

      User.address = '忠科绿苑'
      "忠科绿苑"
      User.address
      "忠科绿苑"

class 的继承

  • 通过extends关键字进行继承

  • constructor中传入基类的属性,并在其中通过super声明

    class Dog extends Animal {
       constructor(name, age) {
           super(name);
           this.age = age;
      }
    }
  • 继承了基类中所有属性和方法,可以在实例对象中直接调用基类方法

  • 若子类中有和基类的同名函数,子类中的函数会将基类中的覆盖

扩展内建对象数组

  • 此时super中的this会指向Array,因此newArr可以访问Array的所有属性和方法

class newArr extends Array {
   constructor(name) {
       super();
       this.name = name;
  }

}
  • 添加属性

    • 在构造函数中声明

    • 添加到super中

      constructor(name, ...items) {
         super(...items);
         this.name = name;
      }
  • 添加方法,直接在子类中定义

posted @ 2020-03-24 16:35  ashen1999  阅读(141)  评论(0编辑  收藏  举报