JavaScript中的类
作用
类是用于创建对象的模板
原理
类的数据类型就是函数,类本身就指向构造函数。
类:定义的方法都存在于prototype中
实例:通过__proto__进行访问原型
用法
- 声明(具名和匿名两种。函数声明和类声明之间的一个重要区别在于,函数声明会提升,类声明不会。)
- 原型方法(constructor() : 一个类只能一个,实例对象的时候会执行,如果没有定义,会自动生成)
- 静态方法(关键字为static, 通常用于为一个应用程序创建工具函数【例如:创建或克隆对象】。通过类直接调用,方法中不存在this)
- extends (继承)
- super (超类) :
- Mix-ins (混入)
原因:解决子类无法多重继承的问题
- # (私有) 只能在类内部调用
可以搭配 getter 和 setter ,暴露给外界使用
- 公有静态字段:
特点:一个类只存一份数据。可以用它存放缓存数据、固定结构数据或者其他你不想在所有实例都复制一份的数据。
- 实例字段:
顺序: 在本类构造函数之前添加。
父类实例字段----父类构造函数---子类实例字段---子类构造函数
- 静态代码块
语法:static { ....}
作用:块状作用域仅在引擎调用时初始化执行一次 ,决解以前初始化静态类属性需要设置一个静态变量初始化逻辑。
例子
// 超类
class Polygon {
#msg = 'hello world';
constructor(width, height) {
this.width = width;
this.height = height;
// 类名调用静态方法
Polygon.staticMethod();
}
static baseStaticMethod() {
return 'base static method output';
}
get msg() {
return this.#msg;
}
set msg(value) {
this.#msg = `hello ${value}`;
}
// 静态调静态,用this, 其他都是用类名
static staticMethod () {
return 'Static method has been called';
}
static anotherStaticMethod() {
return this.staticMethod();
}
}
// 子类 extends
class Square extends Polygon {
// 公有静态字段
static staticField = super.baseStaticMethod();
// 构造函数
constructor(length) {
// 关键字 super
super(length, length);
}
get area() {
return this.height * this.width;
}
set area(value) {
this._area = value;
}
}