返回

对象的原型链:深入解析对象与构造函数之间的关系

前端

绪论

在 JavaScript 中,对象是第一公民,它们是构成程序的基本构建块。对象可以存储数据(属性)和执行行为(方法)。然而,对象并不是孤立存在的,它们与它们的构造函数和原型有着密切的关系,共同组成了一个称为原型链的层次结构。

原型链:对象关系的基础

原型链是一个隐式链接的对象链,它定义了对象如何从其构造函数继承属性和方法。每个对象都有一个称为 __proto__ 的内部属性,它指向其构造函数的原型对象。原型对象又可能有自己的原型,依此类推,直到链条最终到达 null

对象与对象的继承

当一个对象从另一个对象创建时,它将继承后者的所有属性和方法。这是因为新对象与原对象共享一个原型,该原型包含了原对象的属性和方法。

const person = {
  name: "John",
  age: 30
};

const student = Object.create(person);
student.major = "Computer Science";

console.log(student.name); // "John"
console.log(student.major); // "Computer Science"

在这个例子中,student 对象继承了 person 对象的 nameage 属性,以及原型中定义的所有其他属性和方法。

对象与构造函数的继承

对象还可以从其构造函数继承属性和方法。当一个对象使用 new 创建时,它将从构造函数的 prototype 属性中继承属性和方法。

function Person(name, age) {
  this.name = name;
  this.age = age;
}

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
};

const john = new Person("John", 30);
john.greet(); // "Hello, my name is John and I am 30 years old."

在这个例子中,john 对象从 Person 构造函数的 prototype 属性中继承了 greet 方法。

原型链的图示表示

下图直观地展示了原型链:

[图片显示原型链]

结论

原型链是 JavaScript 中一个至关重要的概念,它解释了对象如何从其构造函数继承属性和方法。通过理解原型链,开发者可以充分利用继承的力量,创建灵活且可重用的代码。