es6的class本质是函数和原型链的语法糖,constructor定义构造函数并初始化实例属性,普通方法自动挂载到prototype上,静态方法用static声明且不通过实例调用。

ES6 的 class 本质是函数和原型链的语法糖,定义构造函数和实例方法非常直观,但背后逻辑必须清楚:构造函数对应 constructor,所有普通方法默认挂载在类的 prototype 上。
构造函数用 constructor 定义
每个类都必须有 constructor 方法(显式或隐式)。它会在 new 实例时自动执行,this 指向新生成的实例对象。
- 不写
constructor,JS 会自动补一个空的constructor() {} - 显式定义时,需用
this.xxx = xxx初始化实例属性 - 必须用
new调用,直接调用会报错(与普通函数不同)
实例方法直接写在 class 内部
除 constructor 外,其他方法(如 toString()、save())默认就是实例方法,会被自动添加到 ClassName.prototype 上。
用于 inference.sh 的 JavaScript/TypeScript SDK,可运行 AI 应用、构建代理、集成 150+ 模型。包名:@inferencesh/sdk(npm install),完整 TypeScript 支持。
- 写法简洁:不用
function关键字,也不加逗号分隔 - 调用时通过实例访问,实际执行的是原型上的函数
- 方法不可枚举:
Object.keys(Obj.prototype)不会返回它们,只返回constructor和你定义的方法名
注意 this 指向和实例属性的位置
在 constructor 中赋值的属性(如 this.name)属于实例自身;而 class 内部直接写的函数(非箭头函数)属于原型,共享给所有实例。
- 想让某个方法绑定固定
this,可在constructor中用箭头函数赋值:this.handleClick = () => { ... } - 类体顶层直接写
prop = value(如count = 0),该属性也会挂在实例上,不是原型属性 -
typeof MyClass返回"function",说明类就是函数,MyClass === MyClass.prototype.constructor恒成立
静态方法和实例方法别混淆
加 static 关键字的方法是静态方法,挂载在类本身(即函数对象),不通过实例调用,也不在原型链上。
- 静态方法适合工具型操作,比如
User.createAdmin() - 实例方法适合每个对象独有的行为,比如
user.getName() - 静态方法无法访问
this(指实例),但可访问类名或内部数据










