将方法挂载到原型对象上实现共享复用是提升代码复用率的核心做法;错误写法在构造函数内定义方法导致重复创建,正确写法应定义在prototype上;Object.create可直接基于对象创建新实例并复用方法;合理组织原型层级使通用能力被多层继承;慎用内置原型扩展,推荐封装工具集并通过Object.assign复用。

直接把共用的方法和属性挂到原型对象上,让多个实例共享,而不是每个实例都单独创建一份——这是提升复用率最核心的做法。
把方法定义在构造函数的 prototype 上
每次用 new 创建实例时,如果方法写在构造函数内部,就会为每个实例重复生成一份函数,浪费内存。移到 prototype 上,所有实例共用同一个函数。
- 错误写法(低复用):
function Person(name) { this.name = name; this.sayHello = function() { console.log('Hi ' + this.name); }; }
每新建一个Person实例,sayHello都会重新创建一次。 - 正确写法(高复用):
function Person(name) { this.name = name; }<br>Person.prototype.sayHello = function() { console.log('Hi ' + this.name); };
所有Person实例通过原型链共享同一个sayHello函数。
用 Object.create 基于原型对象创建新对象
不依赖构造函数,直接以某个对象为原型创建新对象,天然实现方法复用。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
const animal = { speak() { console.log('Sound!'); } };<br>const dog = Object.create(animal);<br>const cat = Object.create(animal);<br>dog.speak(); // Sound!<br>cat.speak(); // Sound!- 新增属性只属于当前对象,方法仍从原型继承,避免重复定义。
合理组织原型层级,复用通用能力
把通用逻辑放在上层原型,具体类型只补充差异部分。比如所有动物都有 eat,但只有狗有 bark。
立即学习“Java免费学习笔记(深入)”;
const Animal = { eat() { console.log(this.name + ' is eating'); } };<br>const Dog = Object.create(Animal);<br>Dog.bark = function() { console.log('Woof!'); };<br>const myDog = Object.create(Dog);<br>myDog.name = 'Leo';<br>myDog.eat(); // Leo is eating<br>myDog.bark(); // Woof!- 这样
eat被所有基于Animal的对象复用,bark只由狗相关对象使用。
慎用扩展内置原型,但可封装成可复用工具集
直接改 Array.prototype 等存在风险,但可以定义独立的工具对象,再用 Object.assign 或组合方式注入。
- 例如:
const ArrayUtils = { unique(arr) { return [...new Set(arr)]; }, sum(arr) { return arr.reduce((a, b) => a + b, 0); } };<br>const list = Object.assign([], [1,2,2,3]);<br>Object.assign(list, ArrayUtils);<br>list.unique(); // [1,2,3] - 既复用了工具方法,又不污染全局环境。

















