ES6的学习-类 class

定义类

我们可以使用class关键字来声明一个类,或者使用类表达式来定义一个类,类表达式可以是被命名的或匿名的。

  // 声明一个类
  class Foo {
    constructor() {
      this.color = 'blue';
    }    
  }
  // 访问类
  let foo = new Foo();
  console.log(foo.color); // blue

  /*******************************************/
  //  定义一个类
  let MyFoo = class Foo {
    constructor() {
      this.color = 'blue';
    }
    sayColor() {
      console.log(this.color);
    } 
  }
  // 使用 new 来使用类
  let foo = new MyFoo();
  foo.sayColor(); // blue

类声明和表达式都不会声明提升,这点和函数声明不同。类声明或定义之后,需要用new 来使用类。

  • constructor

constructor方法是类默认的方法,如果显式没有定义,则会默认添加一个空的constructor方法,一个类只能有一个名为constructor的方法,该方法会默认返回实例对象this(包含自身属性和原型对象的属性方法);

  class Foo {
    constructor() {
      this.color = 'blue';
    }    
    sayColor() {
      console.log(this);
    }
  }
  let foo = new Foo();
  foo.sayColor();


可以看出,this含有实例对象自身的属性和原型对象上的方法。

  • 静态方法

static关键字用来定义一个类的静态方法,在静态方法中没有this值,调用静态方法也只能用类来直接调用。

  class Foo {
    static sayColor() {
      console.log('blue');
    } 
  }
  Foo.sayColor(); // blue
  • 使用extends继承父类

extends关键字用于创建一个子类,来继承父类所有属性和方法。

  class Parent {
    constructor() {
      this.money = 100;
    }
    sayMoney() {
      console.log(this.money);
    } 
  }
  class Son extends Parent {
  }
  let son = new Son();
  son.sayMoney(); // 100

子类中若要使用this关键字,则需要先在构造函数constructor()内部调用super(),否则会报错。

posted @ 2017-08-18 21:58  yangrenmu  阅读(166)  评论(0编辑  收藏  举报