返回

JavaScript基础篇02:对象篇的构造函数、原型和继承背后的逻辑

前端

构造函数、原型和继承:JavaScript 对象的基础

引言

在 JavaScript 的广阔世界中,理解对象是至关重要的。对象允许我们存储数据并对其进行操作,它是构建复杂应用程序和网站的基础。在这篇文章中,我们将深入探讨构造函数、原型和继承,这三个概念是 JavaScript 对象的基础。

什么是构造函数?

构造函数 是创建对象实例的蓝图。它定义了对象应该具有的属性和方法。为了使用构造函数创建一个对象实例,我们使用 new

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

const person1 = new Person('John Doe', 30);

在这个例子中,Person 构造函数接收两个参数:nameage。当我们使用 new 关键字调用 Person 构造函数时,它会创建一个新对象实例,并将 nameage 参数的值分别分配给实例的 nameage 属性。

原型:对象的共享行为

每个对象都有一个原型 ,它是一个包含对象可以访问的所有属性和方法的对象。我们可以将原型看作是对象的父对象。当一个对象访问不存在的属性或方法时,它会自动在原型中查找。

const person1 = new Person('John Doe', 30);
console.log(person1.name); // John Doe

Person.prototype.greet = function() {
  console.log(`Hello, my name is ${this.name}!`);
};

person1.greet(); // Hello, my name is John Doe!

在这个例子中,我们定义了一个 greet 方法并将其添加到 Person 原型的 greet 属性。现在,我们可以使用 greet 方法来访问每个 Person 实例的 name 属性。

继承:从父类到子类

继承 允许我们创建新的类(子类),该类可以从另一个类(父类)继承属性和方法。子类可以访问父类的所有属性和方法,还可以定义自己的属性和方法。

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

  greet() {
    console.log(`Hello, my name is ${this.name}!`);
  }
}

class Student extends Person {
  constructor(name, age, major) {
    super(name, age);
    this.major = major;
  }

  study() {
    console.log(`${this.name} is studying ${this.major}!`);
  }
}

const student1 = new Student('Jane Doe', 20, 'Computer Science');
student1.greet(); // Hello, my name is Jane Doe!
student1.study(); // Jane Doe is studying Computer Science!

在这个例子中,我们定义了一个 Person 类和一个 Student 类。Student 类继承了 Person 类,因此它可以访问 Person 类的所有属性和方法。Student 类还定义了自己的属性 major 和方法 study

总结

构造函数、原型和继承是 JavaScript 对象中三个至关重要的概念。构造函数用于创建对象实例,原型包含了对象可以访问的所有属性和方法,继承允许我们创建新的类,该类可以从另一个类继承属性和方法。理解这些概念对于理解 JavaScript 对象是如何工作的非常重要。

常见问题解答

  1. 什么是构造函数?

    • 构造函数是一个用于创建对象实例的蓝图。
  2. 什么是原型?

    • 原型是一个包含对象可以访问的所有属性和方法的对象。
  3. 什么是继承?

    • 继承允许一个类(子类)从另一个类(父类)继承属性和方法。
  4. 如何使用 new 关键字?

    • new 关键字用于调用构造函数并创建一个新对象实例。
  5. 构造函数和类之间的区别是什么?

    • 构造函数是一个用于创建对象实例的函数,而类是一个模板,用于定义对象的属性和方法。