静态方法属于类本身,实例方法属于对象;静态方法必须挂载到类名(如static关键字或直接赋值),只能用类名调用;实例方法应定义在原型上,通过this绑定或原型链访问;构造函数仅初始化状态,不定义方法,但可安全调用已存在的静态或已绑定实例方法。

静态方法和实例方法本质不同,隔离的关键不是“在构造函数里实现”,而是明确它们的归属位置和调用路径:静态方法属于类本身,实例方法属于每个对象。构造函数只是初始化实例的入口,它不负责定义方法,但可以配合设计来强化这种隔离。
静态方法必须定义在类/构造函数上
静态方法不能出现在构造函数体内,也不能通过 this 绑定。它必须直接挂载到类名(或构造函数)上:
- JavaScript/TypeScript 中用
static关键字声明,如class Utils { static parse() { ... } } - 原生构造函数中可直接赋值:
MyClass.staticMethod = function() { ... }; - 调用时只能用
MyClass.staticMethod(),new MyClass().staticMethod()会报错或返回undefined
实例方法必须通过原型或 this 绑定
实例方法要让所有对象都能访问,就得走原型链或构造函数内绑定:
- 推荐方式:定义在
prototype上,如MyClass.prototype.doWork = function() { ... }; - ES6+ 类写法:
class MyClass { doWork() { ... } }—— 这种语法自动挂到原型 - 构造函数内用
this.method = function() {...}也可,但每次实例化都新建函数,不推荐用于通用逻辑
避免混淆:构造函数里不“部署”方法,只“使用”方法
构造函数的作用是初始化实例状态,不是定义行为。但它可以安全调用两类方法:
- 调用静态方法:比如
if (!MyClass.isValid(id)) throw new Error(); - 调用实例方法:仅限已绑定的(如
this.init()),但注意此时this尚未完全就绪,慎用依赖完整状态的方法 - 不建议在构造函数里动态添加方法到
this或prototype,会破坏类型一致性与性能
类型语言(如 TypeScript)中强化隔离
TypeScript 能在编译期防止误用:
- 静态方法调用时若写成
instance.staticMethod(),TS 直接报错 - 抽象类中可用
protected abstract validate(): void强制子类实现校验逻辑,再在构造函数中调用——既保持实例方法语义,又实现“类级别契约” - 工具类可设私有构造函数 + 全静态成员,从语法上杜绝实例化可能











