面试题答案
一键面试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原型链的作用
- 属性和方法查找:当访问一个对象的属性或方法时,如果该对象自身没有定义这个属性或方法,JavaScript会沿着原型链向上查找,直到找到该属性或方法,或者到达原型链的顶端(
null
)。例如,所有对象都可以访问toString
方法,即使它们自身没有定义,因为toString
方法定义在Object.prototype
上,通过原型链实现共享。 - 代码复用:多个对象可以共享原型上的属性和方法,避免在每个对象实例上重复定义,节省内存空间。
原型链与类继承的关系
在JavaScript中,类继承本质上是基于原型链实现的。当使用class
语法定义一个类并通过extends
关键字实现继承时,JavaScript在背后依然是利用原型链来建立父子类之间的关系。子类的原型对象会被设置为父类的一个实例,这样子类的实例就可以通过原型链访问到父类的属性和方法。例如,Dog
类继承自Animal
类,Dog.prototype
是Animal
类的一个实例,所以Dog
类的实例在查找属性和方法时,会先在自身查找,找不到则沿着原型链到Animal
类的原型上去查找。