JavaScript中的类

发布时间 2023-12-20 10:25:22作者: 萧纳

作用

类是用于创建对象的模板

用法

  1. 声明(具名和匿名两种。函数声明和类声明之间的一个重要区别在于,函数声明会提升,类声明不会。)
  2. 原型方法(constructor() : 一个类只能一个,实例对象的时候会执行,如果没有定义,会自动生成)
  3. 静态方法(关键字为static, 通常用于为一个应用程序创建工具函数【例如:创建或克隆对象】。通过类直接调用,方法中不存在this)
  4. extends (继承)
  5. super (超类) :
  6. Mix-ins (混入)

原因:解决子类无法多重继承的问题

  1. # (私有) 只能在类内部调用

可以搭配 getter 和 setter ,暴露给外界使用

  1. 公有静态字段:

特点:一个类只存一份数据。可以用它存放缓存数据、固定结构数据或者其他你不想在所有实例都复制一份的数据。

  1. 实例字段:

顺序: 在本类构造函数之前添加。
父类实例字段----父类构造函数---子类实例字段---子类构造函数

例子

// 超类
	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;
		}
	}
	```