返回

原型链和继承:揭开JavaScript继承的神秘面纱

前端

在JavaScript中,原型链和继承是两个关键概念。原型链是对象之间的一种关系,它允许对象访问和使用其他对象(其原型)的属性和方法。继承则是一种机制,它允许一个对象(子对象)从另一个对象(父对象)继承属性和方法。

原型链的构建

原型链的构建是通过将一个类型的实例赋值给另一个构造函数的原型实现的。例如,以下代码创建了一个名为Person的构造函数:

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

现在,我们可以创建一个Person的实例,并将其赋值给另一个构造函数的原型。例如,以下代码创建了一个名为Student的构造函数,并将其原型设置为Person的实例:

function Student(name, grade) {
  Person.call(this, name);
  this.grade = grade;
}

Student.prototype = new Person();

现在,Student的实例将继承Person的属性和方法。例如,以下代码创建一个Student的实例,并访问其name属性:

const student = new Student("John Doe", "A");
console.log(student.name); // "John Doe"

组合继承

组合继承是最常用的继承模式。它使用原型链继承共享的属性和方法,并使用对象继承来继承特定于实例的属性和方法。例如,以下代码创建了一个名为Teacher的构造函数,并使用组合继承从Person构造函数继承属性和方法:

function Teacher(name, subject) {
  Person.call(this, name);
  this.subject = subject;
}

Teacher.prototype = Object.create(Person.prototype);
Teacher.prototype.constructor = Teacher;

现在,Teacher的实例将继承Person的属性和方法,以及Teacher特有的subject属性。例如,以下代码创建一个Teacher的实例,并访问其name和subject属性:

const teacher = new Teacher("Jane Doe", "Math");
console.log(teacher.name); // "Jane Doe"
console.log(teacher.subject); // "Math"

总结

原型链和继承是JavaScript中的两个关键概念。原型链允许对象访问和使用其他对象(其原型)的属性和方法。继承则是一种机制,它允许一个对象(子对象)从另一个对象(父对象)继承属性和方法。组合继承是最常用的继承模式,它使用原型链继承共享的属性和方法,并使用对象继承来继承特定于实例的属性和方法。