返回
走进JS原型和继承,一文看懂!
前端
2023-09-16 02:31:19
什么是原型和继承?
在JS中,原型是所有对象都拥有的一个特殊属性。原型对象存储着对象的属性和方法,并被所有继承自该对象的子对象共享。继承是一种创建新对象的机制,新对象可以从其父对象继承属性和方法。
原型链
每个JS对象都有一个指向其原型的内部指针,这个指针称为原型链。原型链允许对象访问其原型对象的所有属性和方法。如果一个对象没有某个属性或方法,JS会自动沿着原型链向上查找,直到找到该属性或方法为止。
基于原型实现的继承
在JS中,继承是通过原型实现的。当一个对象被创建时,它会自动获得一个指向其父对象的指针。这意味着子对象可以访问父对象的所有属性和方法。如果子对象没有某个属性或方法,JS会自动沿着原型链向上查找,直到找到该属性或方法为止。
构造函数
构造函数是一种创建新对象的函数。当一个构造函数被调用时,它会创建一个新的对象,并将该对象作为返回值。构造函数可以接收参数,这些参数将被赋予新对象的属性和方法。
面向对象编程
面向对象编程(OOP)是一种编程范式,它将程序分解成一系列的对象。每个对象都有自己的属性和方法,并且可以与其他对象交互。OOP有助于提高代码的可重用性和可维护性。
类
在ES6中,引入了类(class)的概念。类是一种创建对象的模板。类可以包含属性和方法,并且可以被其他类继承。
方法
方法是对象的属性,它是一种函数。方法可以被调用,并可以接收参数和返回值。
实例
// 定义一个父类
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
// 定义一个方法
speak() {
console.log(`My name is ${this.name} and I am ${this.age} years old.`);
}
}
// 定义一个子类
class Student extends Person {
constructor(name, age, school) {
super(name, age);
this.school = school;
}
// 覆盖父类的方法
speak() {
super.speak();
console.log(`I am a student at ${this.school}.`);
}
}
// 创建一个父类对象
const person = new Person('John Doe', 30);
// 创建一个子类对象
const student = new Student('Jane Doe', 20, 'Harvard University');
// 调用父类方法
person.speak();
// 调用子类方法
student.speak();
输出:
My name is John Doe and I am 30 years old.
My name is Jane Doe and I am 20 years old.
I am a student at Harvard University.
总结
原型和继承是JS核心基础知识。原型是所有对象都拥有的一个特殊属性,存储着对象的属性和方法。原型链允许对象访问其原型对象的所有属性和方法。基于原型实现的继承允许子对象继承父对象的所有属性和方法。构造函数是一种创建新对象的函数。OOP是一种编程范式,它将程序分解成一系列的对象。类是一种创建对象的模板。方法是对象的属性,它是一种函数。