静态属性属于类本身,是全类共享的统一配置或常量;实例属性属于具体对象,每个实例独有、互不干扰。前者类名直接访问,后者必须通过实例调用。

静态属性属于类本身,描述的是“这类东西共有的、不随个体变化的特征”;实例属性属于具体对象,描述的是“某个具体个体独有的状态或数据”。语义上,一个讲“类的全局设定”,一个讲“对象的私人信息”。
静态属性:代表类的固有特征
它不依赖于任何实例,反映的是整个类的统一配置、常量、工具配置或共享资源。比如:
- Date.now 是 Date 类的静态方法,表示“当前时间”这个与任何具体日期对象无关的事实;
- Array.isArray 是 Array 的静态方法,用于判断类型,它不操作某个数组,而是服务于所有可能的值;
- 若定义 class ApiClient { static baseUrl = 'https://api.example.com' },说明所有该类的实例默认都用这个地址——这是类的设计契约,不是某个实例的临时选择。
实例属性:承载对象的独立状态
它在每个实例创建时被初始化,彼此隔离,记录该对象独有的数据。比如:
- const user1 = new User('Alice', 28) 中,user1.name 和 user1.age 是实例属性,user2 = new User('Bob', 35) 的同名属性互不影响;
- React 组件中 state 或 ref 是典型的实例属性,每个组件实例维护自己的一份;
- 即使两个实例由同一个类创建,它们的实例属性值可以完全不同,且修改一个不会波及另一个。
关键语义分界点
判断一个属性该设为静态还是实例,可问三个问题:
- 它是否对所有实例都一样?→ 是,倾向静态
- 它是否描述“某一个具体对象”的情况?→ 是,必须是实例属性
- 它是否在类加载时就应存在,无需 new 就能使用?→ 是,适合静态
- 它是否需要在每次 new 时重新计算或绑定(如事件监听器、缓存容器)?→ 是,属于实例
常见误用提醒
把本该是实例属性的字段写成静态,会导致多个实例意外共享同一份数据,引发隐蔽 bug:
- 错误示例:class Counter { static count = 0; increment() { Counter.count++ } } → 所有 Counter 实例共用一个 count
- 正确做法:this.count = 0 在 constructor 中初始化,每个实例拥有自己的 count


















