本章我们将学习 ES6 中的 类,了解类基本定义和继承相关知识
ES6 中的 类 是基于原型的继承语法糖,本质上它是一个 function 类型
1.1 原型声明
function Car(engines) {
this.engines = engines
this.run = false
}
Car.prototype.startEngines = function() {
console.log("running ...")
this.run = true
}
const yourCar = new Car(1)
yourCar.startEngines()
const myCar = new Car(2)
myCar.startEngines()
1.2 类声明
class Car {
constructor(engines){
this.engines = engines
this.run = false
}
startEngines(){
console.log("running ...")
this.run = true
}
}
const yourCar = new Car(1)
yourCar.startEngines()
const myCar = new Car(2)
myCar.startEngines()
console.log(typeof Car)// function
使用类声明是,需要先声明类,然后才能访问,否则抛出ReferenceError。这一点不同于函数声,函数声明会提升作用域,而无需事先声明
2.1 构造方法
使用关键词 constructor 声明的方法,用于在创建和实例化类对象。
2.2 方法
如示例 1.2 中定义的 startEngines 方法
2.3 静态方法
使用关键字 static 修饰的方法,允许通过类名直接调用静态方法而无需实例化。
class Car {
constructor(engines = 1) {
this.engines = engines
this.run = false
}
static startEngines() {
console.log("running ...")
this.run = true
}
}
Car.startEngines()
extends 关键词用于创建基于另一个类的子类定义 当子类存在构造函数时, 需要在使用 this 之前调用 super()
class Animal {
constructor (name) {
this.name = name
}
}
class Dog extends Animal {
constructor (name) {
super(name)
this.legs = 4;
}
run() {
console.log('running ...')
}
}
const lily = new Dog('lily')
lily.run();
console.log( lily instanceof Dog)// trye
console.log( lily instanceof Animal)// true