返回

JS 原型链与继承,来带你的思维升级**

前端

开篇

在 JavaScript 的世界里,原型链和继承是两个关键的概念,它们决定了对象之间的关系和行为。掌握这两个知识点对于理解 JavaScript 的对象系统至关重要。本文将带你踏上一段思维之旅,深入探索原型链和继承的奥秘,为你提供全新的视角。

原型链

原型链是 JavaScript 中一种特殊的机制,它定义了对象之间的继承关系。每个对象都有一个内部的属性 "[[Prototype]]",该属性指向其原型对象。原型对象又具有自己的原型对象,如此递归直至最终指向 null。

作用

当我们访问一个对象的属性或方法时,如果该对象本身没有该属性或方法,JavaScript 引擎会沿着原型链向上查找。如果在某个原型对象中找到了该属性或方法,则会将其返回。这种机制使得子对象可以继承父对象的行为和属性。

继承

继承是基于原型链的一种机制,它允许子对象获得父对象的行为和属性。在 JavaScript 中,有两种主要类型的继承:原型继承和构造函数继承。

原型继承

原型继承是最简单、最常用的继承方式。它通过修改对象的原型对象来实现继承。例如,以下代码创建了一个父对象 Person,并通过修改 Person.prototype 创建了一个子对象 Student:

function Person() {
  this.name = "John";
}

Person.prototype.greet = function() {
  console.log("Hello, my name is " + this.name);
};

function Student() {
  this.major = "Computer Science";
}

Student.prototype = new Person();

const student = new Student();
student.greet(); // 输出:"Hello, my name is John"

构造函数继承

构造函数继承是一种更复杂的继承方式,它通过使用同名构造函数来实现继承。以下代码展示了如何使用构造函数继承实现上面的示例:

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

Person.prototype.greet = function() {
  console.log("Hello, my name is " + this.name);
};

function Student(name, major) {
  Person.call(this, name);
  this.major = major;
}

Student.prototype = new Person();

const student = new Student("John", "Computer Science");
student.greet(); // 输出:"Hello, my name is John"

prototype.constructor

prototype.constructor 是一个特殊的属性,它指向对象的构造函数。在原型继承中,prototype.constructor 指向父对象的构造函数,而在构造函数继承中,它指向子对象的构造函数。

总结

原型链和继承是 JavaScript 中强大的机制,它们使我们能够创建复杂的对象关系和行为。理解这两个概念对于掌握 JavaScript 的面向对象编程至关重要。通过深入了解原型链和继承,你可以提升你的 JavaScript 编程能力,解锁更高层次的代码理解和问题解决能力。