类
1、定义类-和定义函数类似-两种方式:类声明和类表达式
类声明
1 | class P1 {}; |
类表达式
1 | const P2 = class {}; |
与函数表达式类似,类表达式在他们被求值前也不能引用。不过,与函数定义不同的是,虽然函数声明可以提升,但类定义不能.
1 | // 函数 |
另一个和函数声明不同的地方是,函数受函数作用域限制,而类受块作用域限制
1 | { |
2、类可以包含构造函数方法、实例方法、获取函数、设置函数和静态类方法
(1)类构造函数
constructor
关键字用于在类定义块内部创建类的构造函数。方法名constructor会告诉解释器在使用new操作符创建类的新实例时,应该调用这个函数.构造函数的定义不是必须的,不定义构造函数相当于将构造函数定义为空函数
实例化-使用new
操作符实例化Person
的操作等于使用new
调用其构造函数。
类是一种特殊函数
(2)实例、原型和类成员
1 | class Person { |
(3)类定义语法支持在原型和类上定义生成器方法
1 | class Person1 { |
因为支持生成器方法,所以可以添加一个默认的迭代器,把类实例变成可迭代对象:
1 | class Person2 { |
3、继承
使用
super
注意事项
(1)super
只能在派生类构造函数和静态方法中使用
1 | class Vehicle { |
(2)不能单独引用super
关键字,要么用它调用构造函数,要么用它引用静态方法
1 | class Vehicle {} |
(3)调用super()
会调用父类构造函数,并将返回的实例赋值给this
1 | class Vehicle {} |
(4)super
的行为如同调用构造函数,如果需要给父类构造函数传参,则需要手动传入
1 | class Vehicle2 { |
(5)如果没有定义类构造函数,在实例化派生类时会调用super()
,而且会传入所有传给派生类的参数
(6)在类构造函数中,不能在调用super()
之前引用this
1 | class Vehicle3 {}; |
(7)如果在派生类中显示定义了构造函数,则要么必须在其中调用super
,要么必须在其中返回一个对象。