MST

星途 面试题库

面试题:JavaScript中如何通过原型链实现子类继承父类

请详细描述在JavaScript中,使用原型链方式实现子类继承父类的具体步骤,并给出一个简单示例代码说明。
43.6万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
  1. 具体步骤
    • 步骤一:创建父类构造函数 定义一个函数作为父类的构造函数,在这个函数内部可以初始化父类的属性。
    • 步骤二:为父类构造函数添加原型方法 通过给父类构造函数的prototype对象添加方法,这些方法会被所有实例共享。
    • 步骤三:创建子类构造函数 定义一个函数作为子类的构造函数,在子类构造函数内部可以初始化子类特有的属性,同时需要调用父类构造函数,以继承父类的属性。
    • 步骤四:设置子类的原型 将子类的原型设置为父类的一个实例,这样子类就可以通过原型链访问父类的原型方法。为了避免修改子类原型时影响父类,通常会使用Object.create()方法来创建一个以父类实例为原型的新对象,并将其赋值给子类的prototype
    • 步骤五:修正子类的构造函数指向 由于步骤四中设置了子类的原型,此时子类的prototype.constructor指向的是父类构造函数,需要手动将其修正为子类构造函数。
  2. 示例代码
// 步骤一:创建父类构造函数
function Animal(name) {
    this.name = name;
}
// 步骤二:为父类构造函数添加原型方法
Animal.prototype.speak = function() {
    console.log(this.name +'makes a sound.');
};
// 步骤三:创建子类构造函数
function Dog(name, breed) {
    // 调用父类构造函数以继承父类属性
    Animal.call(this, name);
    this.breed = breed;
}
// 步骤四:设置子类的原型
Dog.prototype = Object.create(Animal.prototype);
// 步骤五:修正子类的构造函数指向
Dog.prototype.constructor = Dog;
// 创建子类实例
const myDog = new Dog('Buddy', 'Golden Retriever');
myDog.speak();// 调用从父类继承的方法
console.log(myDog.breed);// 访问子类特有的属性