原型节省内存因方法共享而非拷贝;Object.create实现配置继承;禁在prototype放可变引用;列式存储分离结构与数据可大幅降内存。

把公共方法挂到构造函数的 prototype 上,而不是在每个实例里重复创建,是 JavaScript 原型对象优化内存最直接有效的方式。
为什么原型能省内存
每个函数对象都有一个 prototype 属性,它指向一个对象。这个对象上的属性和方法,会被所有通过该函数 new 出来的实例共享——不是拷贝,而是共用同一份函数体。
对比一下:
- 如果在构造函数内部写
this.render = function() { ... },每创建 1000 个实例,就生成 1000 份相同的函数代码,占堆内存 - 如果写
MyComponent.prototype.render = function() { ... },1000 个实例只共享这一个函数,节省大量空间
用 Object.create 实现轻量继承
不依赖构造函数也能利用原型链节省内存。ES5 的 Object.create 直接以指定对象为原型创建新对象:
立即学习“Java免费学习笔记(深入)”;
const baseConfig = { timeout: 5000, retries: 3 };const userConfig = Object.create(baseConfig);userConfig.timeout = 8000; // 只覆盖需要的部分
这样多个配置对象共享同一份默认值,避免重复定义相同字段,尤其适合状态管理、主题配置等场景。
避免“伪原型”陷阱:别在原型上放可变引用
原型上的属性是共享的,所以不能在 prototype 上直接定义数组、对象或函数内部的闭包变量,否则所有实例会共用同一个引用,导致数据污染。
错误示例:MyClass.prototype.cache = {};instance1.cache.id = 1;console.log(instance2.cache.id); // 1 ← 意外被改了
正确做法:在构造函数中初始化实例专属的引用:function MyClass() { this.cache = {}; }
结合列式存储进一步降内存(进阶)
当处理大批量相似对象(比如 50 万条用户记录),仅靠原型还不够。此时可把“结构”和“数据”分离:
- 用一个原型对象描述字段名、类型、访问逻辑(如
{ getName() { return this.data[0]; } }) - 用 TypedArray 或普通数组按列存原始值(
names = new StringArray(...),ages = new Int32Array(...))
原型负责行为,数组负责数据,两者结合,既能复用逻辑,又能大幅压缩内存——实测从 132MB 降到 25MB 就是这么做的。


















