javascript中类是什么_如何使用es6类

JavaScript中的类是构造函数的语法糖,基于原型机制,声明即函数,实例方法挂载在prototype上,支持constructor、static、getter/setter等特性。

JavaScript 中的 类(class) 是一种定义对象模板的语法形式,本质是构造函数的语法糖——它不改变底层原型机制,但让面向对象写法更清晰、更接近传统语言(如 Java、C++)的风格。

类就是带语法糖的构造函数

ES6 的 class 内部依然基于原型(prototype)工作。声明一个类,等同于定义一个函数;用 new 实例化,和调用构造函数完全一致:

  • typeof MyClass 返回 "function"
  • MyClass === MyClass.prototype.constructortrue
  • 所有实例方法都自动挂载在 MyClass.prototype

基本写法与 constructor

类必须用 class 关键字声明,至少隐式或显式包含一个 constructor 方法:

  • 不写 constructor,系统会自动添加空的 constructor() {}
  • 构造函数用于初始化实例属性,this 指向新创建的实例
  • 类内部默认启用严格模式,无需手动写 "use strict"

示例:

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }
  greet() {
    return `Hello, I'm ${this.name}`;
  }
}
const p = new Person('Alice', 25);
p.greet(); // "Hello, I'm Alice"

类中常用功能怎么写

除了基础结构,ES6 类支持多种实用特性:

  • 静态方法:用 static 声明,只能通过类名调用,不能被实例访问
  • getter/setter:用 getset 定义计算属性或带校验的赋值逻辑
  • 不可枚举性:类中定义的方法不会出现在 for...inObject.keys()
  • 无变量提升:必须先声明类,再使用,否则报 ReferenceError

例如带校验的 setter:

class User {
  constructor(name) {
    this._name = name;
  }
  get name() {
    return this._name.toUpperCase();
  }
  set name(value) {
    if (value.length < 2) throw new Error('Name too short');
    this._name = value;
  }
}

注意几个关键限制

类不是万能的,有几条硬性规则要遵守:

  • 必须用 new 调用,直接执行会报错:MyClass()
  • 类声明不会被提升,顺序很重要
  • 不能用 function 关键字写方法体,也不用逗号分隔方法
  • 类内部不能定义普通变量(如 let x = 1),只能写方法、constructorstaticget/set

基本上就这些。用熟了你会发现,它让原型继承更可读,但底层逻辑一点没变。