JavaScript 的原型链(Prototype Chain)是其面向对象特性中的一个重要概念,用于实现对象间的继承和属性查找机制。
每个 JavaScript 对象都有一个内置的 [[Prototype]]
属性(可以通过 __proto__
或者 Object.getPrototypeOf()
方法访问),它指向该对象的原型对象。当试图访问一个对象的属性时,如果该对象自身不存在该属性,JavaScript 引擎会向上搜索其原型对象,如果原型对象存在该属性,则返回该属性的值。这个搜索过程会沿着原型链逐级向上,直至找到该属性或者到达原型链的顶端(即 null
,表示原型链的终点)。
例如:
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log("Hello, " + this.name);
}
let person = new Person("John");
person.sayHello(); // 输出 "Hello, John"
console.log(person.hasOwnProperty("name")); // 输出 true,因为 "name" 是 person 自身的属性
console.log(person.hasOwnProperty("sayHello")); // 输出 false,因为 "sayHello" 在 person 的原型(Person.prototype)上
在这个例子中,person
对象的 [[Prototype]]
指向 Person.prototype
,当尝试访问 person
的 sayHello
方法时,虽然 person
对象自身并没有这个方法,但是引擎会沿着原型链向上查找,最终在 Person.prototype
上找到该方法并执行。
总的来说,JavaScript 的原型链就是通过对象的 [[Prototype]]
链接起来的一系列对象,形成了一种继承关系,使得对象可以共享和继承属性和方法。