MST

星途 面试题库

面试题:JavaScript中类的定义与原型链基础

请使用ES6的class语法定义一个名为`Animal`的类,包含属性`name`和方法`speak`。然后创建一个`Dog`类继承自`Animal`,并重写`speak`方法。同时,请简要说明JavaScript原型链的作用以及它与类继承的关系。
17.1万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试
class Animal {
    constructor(name) {
        this.name = name;
    }
    speak() {
        console.log(`${this.name} makes a sound.`);
    }
}

class Dog extends Animal {
    speak() {
        console.log(`${this.name} barks.`);
    }
}

JavaScript原型链的作用

  1. 属性和方法查找:当访问一个对象的属性或方法时,如果该对象自身没有定义这个属性或方法,JavaScript会沿着原型链向上查找,直到找到该属性或方法,或者到达原型链的顶端(null)。例如,所有对象都可以访问toString方法,即使它们自身没有定义,因为toString方法定义在Object.prototype上,通过原型链实现共享。
  2. 代码复用:多个对象可以共享原型上的属性和方法,避免在每个对象实例上重复定义,节省内存空间。

原型链与类继承的关系

在JavaScript中,类继承本质上是基于原型链实现的。当使用class语法定义一个类并通过extends关键字实现继承时,JavaScript在背后依然是利用原型链来建立父子类之间的关系。子类的原型对象会被设置为父类的一个实例,这样子类的实例就可以通过原型链访问到父类的属性和方法。例如,Dog类继承自Animal类,Dog.prototypeAnimal类的一个实例,所以Dog类的实例在查找属性和方法时,会先在自身查找,找不到则沿着原型链到Animal类的原型上去查找。