ES6 类

简介

和Java定义类相类似

class Point {
  // 构造函数
  constructor (x,y) {
    this.x = x
    this.y = y
  }
  // 类方法
  toString () {
    return '(' + this.x + ', ' + this.y + ')'
  }
}

注意事项:

  1. ES6 的类,完全可以看作构造函数的另一种写法
typeof Point // "function"
  1. 类的内部所有定义的方法,都是不可枚举的
Object.keys(Point.prototype)
// []
Object.getOwnPropertyNames(Point.prototype)
// ["constructor","toString"]
  1. 一个类必须有constructor方法

  2. 类方法调用必须要使用new

  3. 不存在变量提升

  4. 类的方法内部如果含有this,它默认指向类的实例

方法提取出来单独使用,this会指向该方法运行时所在的环境

constructor() {
  this.printName = this.printName.bind(this);
}
  1. 静态属性/方法和实例属性/方法 (父类的静态方法,可以被子类继承)

  2. 父类只能继承,不能被实例化

class Parent {
  constructor () {
    if (new.target === Parent) {
      throw new Error('aa)
    }
  }
}

ES Module

ES6模块和CommonJS、AMD等模块

  1. 都是运行时确定

  2. 整体加载,然后再读取方法。运行时加载

  3. ES6模块编译时加载

严格模式

ES6模块默认采用严格模式,模块内顶层this指向undefined

import

模块整体加载

export default匿名输出