ES6总结 class

ES6 class 的本质就是原型继承,class只是语法糖 目的是让我们用更简洁明了的语法创建对象及处理相关的继承

javascript传统做法是当生成一个对象实例,需要定义构造函数,然后通过new的方式完成

function Person(name){
  this.name = name
}
Person.prototype.run = function () {
  console.log("run")
}
var per = new Person("Jack")

ES6的类,可以看作构造函数的另一种写法

class Person {
  //这是 class 中的构造器 用来接收参数, new 这个类的时候,会先执行构造器中的代码
  constructor(name){
    this.name = name // this 代表的是实例对象 
  }
  run(){
    console.log("run")
  }
}
var per = new Person("Jack")
// 类中定义的方法都是直接挂载到 prototype 上的
per.__proto__.hasOwnProperty('run') // true

ES6类的 静态属性/静态方法

class Person {
  constructor(name){
    this.name = name
  }
  // 定义 静态方法 使用 static 关键字修饰, 静态方法可以直接在类上调用
  static sing(){
    console.log("sing")
  }
}
// 定义静态属性 ---目前 只有这种写法可行 因为 ES6 明确规定 class 内部只有静态方法 没有静态属性, es7提案 可以使用static定义静态属性
Person.info = "info";

Person.info; // info
Person.sing(); // sing

ES6类的 extents 继承

// 父类
class Person {
  // name 是他们共有的属性,可以将name提取到同一个父类中
  constructor(name){
    this.name = name
  }
}

class Chinese extends Person{
}
var c = new Chinese("小明")
c // {name: "小明"}

class American extends Person{
}
var a = new American("Jack")
a // {name: "Jack"}

为子类添加独有的属性

class Person {
  constructor(name){
    this.name = name
  }
}

class Chinese extends Person{
  // super()是一个函数 相当于是父类的构造器, 在子类的构造器中一定要优先调用super()方法, 
  constructor(name, IDNumber){
    super(name) //将共有的属性传递给父类
    this.IDNumber = IDNumber //为自己添加独有的属性
  }
}

var c = new Chinese("小明","1321456******")
c // {name: "小明", IDNumber: "1321456******"}

class American extends Person{
}

var a = new American("Jack","2542456******")
a // American {name: "Jack"}

单例模式
创建多个实例时构造函数只执行一次

class DB {
  static getInstance() {
     // 首次调用时创建实例 new DB() 并挂载到 静态属性上, 第二次直接返回
    if (!DB.instance) {
      DB.instance = new DB();
    }
    return DB.instance;
  }
  constructor() {
    console.log('实例化会触发构造函数!')
    this.connect();
  }
  connect() {
    console.log('连接数据库!')
  }
  find() {
    console.log('查询数据库!')
  }
}

//d1会进入构造函数;实例化d2和d3则不会
var d1 = DB.getInstance();
var d2 = DB.getInstance();
var d3 = DB.getInstance();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值