原型和原型链

2024-04-16 09:37:29

在JavaScript中,原型(Prototype)和原型链(Prototype Chain)是面向对象编程中的重要概念,它们构成了 JavaScript 对象之间的继承机制。

原型(Prototype)

在 JavaScript 中,每个对象都有一个原型对象(prototype object)。原型对象可以包含属性和方法,其他对象可以通过原型实现属性和方法的共享。当试图访问一个对象的属性或方法时,如果该对象本身没有定义这个属性或方法,JavaScript 引擎会沿着原型链向上查找,直到找到匹配的属性或方法或者到达原型链的顶部(即Object.prototype)。

在 JavaScript 中,可以使用 Object.create() 方法或者构造函数配合 prototype 属性来指定对象的原型。

// 使用 Object.create() 创建对象,并指定原型
const parent = {
  greet() {
    return 'Hello';
  }
};

const child = Object.create(parent);
console.log(child.greet()); // 输出:Hello

原型链(Prototype Chain)

原型链是一种链式结构,用于解决对象之间的继承关系。每个对象都有一个原型,而原型也是一个对象,因此原型对象也有自己的原型,这样就形成了原型链。

当试图访问一个对象的属性或方法时,JavaScript 引擎会首先在该对象本身查找,如果找不到,就会沿着原型链向上查找,直到找到匹配的属性或方法或者到达原型链的顶部(即Object.prototype)。

// 构造函数和原型链的例子
function Person(name) {
  this.name = name;
}

Person.prototype.greet = function() {
  return 'Hello, my name is ' + this.name;
};

const john = new Person('John');
console.log(john.greet()); // 输出:Hello, my name is John

在这个例子中,john 对象是通过 Person 构造函数创建的,它的原型是 Person.prototype,而 Person.prototype 的原型是 Object.prototype。所以当访问 john 的属性或方法时,JavaScript 引擎会先查找 john 对象本身是否有该属性或方法,如果没有,就会沿着原型链向上查找。

原型和原型链是 JavaScript 中对象之间继承的机制,它们提供了一种灵活而强大的方式来实现对象的属性和方法的共享和继承。

表情
Ctrl + Enter