定义类
我们可以使用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(),否则会报错。