将公共方法放在原型对象上可实现共享、节省内存并支持继承;class中普通方法自动挂载原型,而构造函数内用this定义的方法会导致重复创建且无法继承。

把公共方法放到原型对象上,是为了让所有实例共享同一份函数,避免重复创建、节省内存,也保证能被子类正常继承。
直接往构造函数的 prototype 上赋值
这是最直观的方式。定义好构造函数后,用点语法给它的 prototype 添加方法:
- function Cat(name) { this.name = name; }
- Cat.prototype.meow = function() { return `${this.name} says meow!`; };
- 之后 new Cat('Mimi') 和 new Cat('Leo') 都能调用 meow(),且内部指向同一个函数体。
class 语法里普通方法自动挂原型
ES6 的 class 是语法糖,写在 class 大括号里的普通方法,默认就绑定到原型上:
- class Dog { constructor(name) { this.name = name; } bark() { return `${this.name} barks!`; } }
- Dog.prototype.bark 存在且是函数;而 new Dog().hasOwnProperty('bark') 返回 false,说明它不在实例上,而在原型链中。
千万别在构造过程里定义方法
如果在 constructor 或 class 字段中用 this.xxx = function(){} 或箭头函数,方法就成了实例私有:
- ❌ this.sing = () => console.log('la la'); —— 每个实例都存一份,无法继承,浪费内存
- ✅ 正确做法:要么写成 class 内的普通方法,要么显式挂到 Constructor.prototype 上
验证方法是否真在原型上
可以快速检查:用 Object.getPrototypeOf(instance) 或直接访问 Constructor.prototype,看目标方法是否存在;再用 instance.hasOwnProperty('methodName') 确认它不在实例自身。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











