原型共享能省内存,是因为方法定义在prototype上时所有实例共用同一函数对象,避免每实例重复创建;若在构造函数内定义this.say=function(){},则1000个实例会占用1000份相同逻辑内存,而prototype方式可降内存60%~98%。

把方法定义在构造函数的 prototype 上,而不是每次 new 实例时在构造函数内部重新创建函数,就能让所有实例共用同一份方法代码,显著减少内存占用。
为什么原型共享能省内存
JavaScript 中每个函数都是独立对象。如果在构造函数里写 this.say = function() {...},每创建一个实例,就生成一个新函数对象;1000 个实例就占 1000 份相同逻辑的内存。而挂到 prototype 上后,这 1000 个实例都通过原型链访问同一个函数,V8 引擎测试显示内存可降低约 60%~98%。
正确写法:数据进实例,方法进 prototype
- 实例专属属性(如
this.head、this.root、this.size)必须在构造函数中用this.xxx = xxx初始化 - 通用行为(如
append()、toArray()、inorderTraversal())统一定义在Constructor.prototype上 - 避免在
prototype上直接放可变引用类型(如prototype.cache = []),否则所有实例会意外共享同一数组
验证是否真正共享
可以简单比对两个实例的方法引用是否相等:
const a = new LinkedList();<br>const b = new LinkedList();<br>console.log(a.append === b.append); // true → 表示共享成功
立即学习“Java免费学习笔记(深入)”;
顺便注意原型链的几个关键点
- 每个函数都有
prototype属性,它指向该函数创建的实例的原型对象 - 每个实例都有隐式属性
__proto__,它指向其构造函数的prototype - 方法查找遵循原型链:实例 → 构造函数 prototype → Object.prototype → null
- 若构造函数和 prototype 上有同名方法,实例优先使用自己身上的(就近原则)


















