JavaScript 原型链是一种继承机制,它允许对象共享另一个对象的属性和方法。操作原型链主要包括以下几个方面:
- 设置原型对象(
prototype
):
要使一个对象成为其他对象的实例,需要将该对象作为构造函数的 prototype
属性。例如,创建一个名为 Person
的构造函数:
function Person(name, age) { this.name = name; this.age = age; }
- 添加原型方法:
在构造函数的 prototype
对象上添加方法,这样所有实例都可以访问这些方法。例如,为 Person
添加一个名为 greet
的方法:
Person.prototype.greet = function() {
console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};
- 创建实例并访问原型方法:
通过调用构造函数创建新实例,这些实例会继承 prototype
对象上的属性和方法。例如,创建一个名为 person1
的实例,并调用其 greet
方法:
const person1 = new Person('Alice', 30); person1.greet(); // 输出:Hello, my name is Alice and I am 30 years old.
- 原型链查找:
当访问一个对象的属性或方法时,JavaScript 会首先在该对象本身查找。如果没有找到,JavaScript 会沿着原型链向上查找,直到找到该属性或方法,或者到达原型链的顶端(null
)。
- 继承和原型链:
通过原型链,所有实例都可以继承构造函数原型对象上的属性和方法。这意味着,如果修改了构造函数的原型对象上的方法,所有实例都会受到影响。例如,修改 Person.prototype.greet
方法:
Person.prototype.greet = function() {
console.log(`Hi, my name is ${this.name} and I am ${this.age} years old.`);
};
const person2 = new Person('Bob', 25);
person2.greet(); // 输出:Hi, my name is Bob and I am 25 years old.
通过这种方式,JavaScript 原型链提供了一种灵活且高效的继承机制。