You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript中类的内存分配时机:声明时还是实例化时?

JavaScript类声明与内存分配的关系

在JavaScript中,类本质是特殊的函数对象,它的内存分配逻辑和函数有相似性,但要明确区分「类本身的内存」和「类实例的内存」:

一、类声明/表达式执行时,会为类本身分配内存

不管是类声明还是类表达式,当代码执行到类定义语句时,都会立即为类对应的函数对象、以及它的原型对象分配内存:

  • 类声明(class Foo {}):会被变量提升,但仅创建Foo的变量绑定,直到执行到class Foo {}这行代码时,才会生成类函数对象并分配内存,存储构造函数、原型方法、静态属性/方法等内容。注意:声明提升后Foo处于暂时性死区,执行前访问会抛出ReferenceError。
  • 类表达式(const Foo = class {}):和普通变量赋值逻辑一致,执行到赋值语句时,创建类函数对象并分配内存,之后把这个对象赋值给变量Foo。

举个直观的例子:

// 类声明执行前处于暂时性死区,无法访问
// console.log(MyClass); // 抛出ReferenceError

// 执行到这行时,为MyClass函数对象、MyClass.prototype分配内存
class MyClass {
  constructor(age) {
    this.age = age; // 实例自有属性,创建实例时才分配内存
  }
  sayHi() {} // 存在MyClass.prototype上,类声明时分配内存
  static staticFunc() {} // 存在MyClass本身,类声明时分配内存
}

// 此时MyClass已是占用内存的函数对象
console.log(typeof MyClass); // 输出:function

二、类实例的内存,仅在创建实例时分配

只有当你通过new 类名()调用类的构造函数时,才会为新的实例对象分配独立内存,存储实例的自有属性(比如例子里的this.age)。实例会继承类原型上的方法,但原型本身的内存是在类声明时就分配好的,不会为每个实例重复分配原型方法的内存。

比如:

// 执行这行时,为instance1分配独立内存
const instance1 = new MyClass(20);
// 执行这行时,为instance2分配另一块独立内存
const instance2 = new MyClass(25);

总结

  • 类本身的内存:在类声明语句执行(声明式)或表达式赋值(表达式式)阶段分配。
  • 类实例的内存:仅在调用new创建实例时分配。

内容的提问来源于stack exchange,提问作者JessePinkman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.28 01:17:22