将方法定义在原型对象上可避免实例重复创建函数,节省内存并提升访问效率;需避免原型污染,扩展内置对象前应检测是否存在;继承时用Object.create建立原型链并修正constructor;操作原型应使用Object.getPrototypeOf等标准API。

把方法定义在原型对象上,而不是构造函数内部,是优化 JavaScript 对象性能最直接有效的方式。它避免每个实例重复创建相同函数,显著减少内存占用,同时提升属性访问效率。
共享方法,节省内存
每次用 new 创建实例时,如果方法写在构造函数里,就会为每个实例分配一份新函数;而放在 prototype 上,所有实例共用同一个函数引用。
- ❌ 不推荐(浪费内存):
function Person(name) {<br> this.name = name;<br> this.sayHello = function() { console.log('Hi ' + this.name); };<br>} - ✅ 推荐(方法复用):
function Person(name) {<br> this.name = name;<br>}<br>Person.prototype.sayHello = function() { console.log('Hi ' + this.name); };
此时person1.sayHello === person2.sayHello返回 true
避免原型污染,保持链清晰
不要随意修改内置对象(如 Array.prototype)的原型,尤其在多人协作或第三方库环境中,容易引发冲突或不可预期行为。
- 若需扩展,优先封装成工具函数,或使用
class静态方法 - 必须扩展时,先检测方法是否已存在,防止覆盖:
if (!Array.prototype.last) {<br> Array.prototype.last = function() { return this[this.length - 1]; };<br>}
配合 Object.create 实现轻量继承
子类原型不直接赋值 Parent.prototype(会丢失 constructor),而是用 Object.create(Parent.prototype) 建立干净的原型链,既复用父类方法,又不影响自身构造器语义。
立即学习“Java免费学习笔记(深入)”;
Dog.prototype = Object.create(Animal.prototype);- 紧接着修正构造器:
Dog.prototype.constructor = Dog; - 这样
dog instanceof Animal和dog instanceof Dog都为 true,且方法全部来自原型链,无冗余拷贝
慎用 __proto__,用标准 API 操作原型
__proto__ 是非标准、已废弃的访问方式,生产环境应使用规范方法:
- 读取原型:用
Object.getPrototypeOf(obj) - 设置原型:用
Object.setPrototypeOf(obj, proto)(仅限必要场景,性能略低) - 判断继承关系:用
Parent.prototype.isPrototypeOf(child)



















