JavaScript 的原型链是一种实现对象间继承和属性查找的机制。在 JavaScript 中,每个对象都有一个特殊的内部属性 [[Prototype]],通常可以通过对象的 __proto__ 属性或者 Object.getPrototypeOf() 方法来访问。当我们试图访问一个对象的属性时,如果对象本身没有这个属性,JavaScript 引擎会沿着原型链向上查找,直到找到该属性或者到达原型链的顶端(null)。
原型链的工作原理如下:
prototype)上定义属性和方法。new 关键字创建对象实例,此时对象实例的 [[Prototype]] 属性会指向构造函数的原型对象。下面是一个简单的例子:
// 构造函数
function Person(name) {
this.name = name;
}
// 在原型对象上定义属性和方法
Person.prototype.sayHello = function() {
console.log('Hello, my name is ' + this.name);
};
// 创建对象实例
var person1 = new Person('Alice');
var person2 = new Person('Bob');
// 调用原型对象上的方法
person1.sayHello(); // 输出 "Hello, my name is Alice"
person2.sayHello(); // 输出 "Hello, my name is Bob"
在这个例子中,Person 是一个构造函数,它的原型对象上有 sayHello 方法。当我们创建 Person 的实例时,这些实例的 [[Prototype]] 属性会指向 Person.prototype。因此,当我们调用 person1.sayHello() 和 person2.sayHello() 时,JavaScript 引擎会沿着原型链找到 Person.prototype 上的 sayHello 方法并执行它。
总之,原型链是 JavaScript 中实现继承和属性查找的核心概念。通过原型链,我们可以实现对象间的属性和方法共享,从而提高代码的可重用性和效率。