返回

揭开 JavaScript 中构造函数、原型和原型链的神秘面纱

前端

在 JavaScript 中,构造函数是一种用于创建对象的函数。当您使用 new 运算符调用构造函数时,就会创建一个新的对象。这个新对象将继承构造函数的原型。

原型是一个对象,它包含了所有实例共享的属性和方法。当您访问对象的属性或方法时,JavaScript 会首先在对象本身中查找。如果没有找到,它就会沿着原型链向上查找,直到找到该属性或方法。

原型链是一个对象到其原型的链接列表。当您访问对象的属性或方法时,JavaScript 会沿着原型链向上查找,直到找到该属性或方法。

理解了构造函数、原型和原型链的概念,就可以帮助您更好地理解 JavaScript 中的继承。继承是一种允许一个对象从另一个对象继承属性和方法的机制。在 JavaScript 中,继承是通过原型链实现的。

例如,我们有一个 Person 构造函数,它定义了 nameage 属性,以及一个 speak() 方法。

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

  this.speak = function() {
    console.log(`My name is ${this.name} and I am ${this.age} years old.`);
  };
}

现在,我们创建一个新的 Student 构造函数,它继承自 Person 构造函数。

function Student(name, age, school) {
  Person.call(this, name, age);

  this.school = school;
}

Student 构造函数继承了 Person 构造函数的所有属性和方法。此外,Student 构造函数还定义了一个新的 school 属性。

现在,我们可以创建一个新的 Student 对象。

const student = new Student('John Doe', 20, 'Harvard University');

这个 student 对象具有 nameageschool 属性,以及 speak() 方法。

student.name; // 'John Doe'
student.age; // 20
student.school; // 'Harvard University'
student.speak(); // 'My name is John Doe and I am 20 years old.'

通过对构造函数、原型和原型链的概念的理解,我们可以编写更加强大和可维护的 JavaScript 代码。