在 JavaScript 中,prototype 适合用于 需要创建多个具有相同功能的对象 的情况,特别是在需要共享方法或属性时。这样可以避免每次创建新对象时都重复定义相同的功能,从而节省记忆体。
Prototype 的适用情况:
范例:使用 Prototype 实现共享方法
以下是一个定义建构函式并使用 prototype 添加共享方法的例子:
// 定义一个建构函式
function Person(name, age) {
this.name = name;
this.age = age;
}
// 将共享方法添加到原型
Person.prototype.greet = function () {
console.log(`Hi, my name is ${this.name} and I am ${this.age} years old.`);
};
// 创建多个实例
const person1 = new Person("Alice", 25);
const person2 = new Person("Bob", 30);
// 调用共享方法
person1.greet(); // Hi, my name is Alice and I am 25 years old.
person2.greet(); // Hi, my name is Bob and I am 30 years old.
// 确认方法是否共享
console.log(person1.greet === person2.greet); // true
为什么用 prototype?
什么情况不用 prototype?
如果每个对象需要独立的方法或属性(比如需要每个对象有自己独立的数据),那么应该直接在建构函式中定义,而不是放在原型上。
例如:
function Animal(type) {
this.type = type;
this.getType = function () {
return this.type;
};
}
const cat = new Animal("Cat");
const dog = new Animal("Dog");
console.log(cat.getType === dog.getType); // false (每个实例都有自己独立的 getType 方法)
这样的设计会导致每个实例的方法佔用更多内存,因此应根据需求决定是否使用 prototype。