返回

对象、原型和原型链:揭开面向对象编程的秘密

见解分享

  1. 对象:万物皆对象

在面向对象编程中,一切皆对象。对象是具有属性和方法的实体,它可以现实世界中的实体或抽象概念。例如,我们可以创建一个Person对象来一个人,这个对象可以包含姓名、年龄、性别等属性,以及吃饭、睡觉、工作等方法。

在JavaScript中,对象可以使用对象字面量或class来创建。例如,我们可以使用对象字面量创建一个Person对象:

const person = {
  name: "John Doe",
  age: 30,
  gender: "male",
  eat: function () {
    console.log("I am eating.");
  },
  sleep: function () {
    console.log("I am sleeping.");
  },
  work: function () {
    console.log("I am working.");
  },
};

2. 原型:对象的模板

原型是对象创建的模板。当我们创建一个对象时,它会从其原型中继承属性和方法。例如,如果我们创建一个新的Person对象:

const person1 = new Person();

那么person1对象将从Person原型中继承name、age、gender、eat、sleep和work属性和方法。我们可以使用Object.getPrototypeOf()方法来获取对象的原型:

console.log(Object.getPrototypeOf(person1));

输出结果:

Person {}

3. 原型链:对象的继承关系

原型链是对象的继承关系链。当我们访问一个对象的属性或方法时,JavaScript会首先在该对象中查找该属性或方法。如果找不到,它会沿着原型链向上查找,直到找到该属性或方法。例如,如果我们访问person1对象的name属性:

console.log(person1.name);

JavaScript会首先在person1对象中查找name属性,如果找不到,它会沿着原型链向上查找,直到找到Person原型中的name属性。

原型链可以使我们轻松地创建具有继承关系的对象。例如,我们可以创建一个Student对象,它继承自Person对象:

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

  study() {
    console.log("I am studying.");
  }
}

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

const student1 = new Student("Jane Doe", 20, "female", "Computer Science");

student1对象将从Student原型中继承name、age、gender、eat、sleep、work和major属性和方法,以及从Person原型中继承study方法。我们可以使用Object.getPrototypeOf()方法来查看student1对象的原型链:

console.log(Object.getPrototypeOf(student1));
console.log(Object.getPrototypeOf(Object.getPrototypeOf(student1)));

输出结果:

Student {}
Person {}

结语

对象、原型和原型链是面向对象编程的核心概念。通过理解这三个概念,我们可以更好地理解面向对象编程的思想和机制。在JavaScript中,我们可以使用对象字面量或class关键字来创建对象,可以使用Object.getPrototypeOf()方法来获取对象的原型,可以使用原型链来实现对象的继承。