对象、原型和原型链:揭开面向对象编程的秘密
2023-09-21 04:23:56
- 对象:万物皆对象
在面向对象编程中,一切皆对象。对象是具有属性和方法的实体,它可以现实世界中的实体或抽象概念。例如,我们可以创建一个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()
方法来获取对象的原型,可以使用原型链来实现对象的继承。