MST

星途 面试题库

面试题:JavaScript中原型继承的原理及实现方式

请详细阐述JavaScript原型继承的基本原理,并通过代码实现一个简单的原型继承示例,例如创建一个父类`Animal`,有`name`属性和`eat`方法,再创建一个子类`Dog`继承自`Animal`,并添加`bark`方法。
33.6万 热度难度
编程语言JavaScript

知识考点

AI 面试

面试题答案

一键面试

JavaScript原型继承基本原理

在JavaScript中,每个对象都有一个__proto__属性,指向该对象的原型对象。当访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript会沿着原型链向上查找,直到找到该属性或方法或者到达原型链的顶端(null)。

函数对象(例如构造函数)有一个prototype属性,这个属性是一个对象,它会成为由该构造函数创建的实例的原型对象。原型继承就是利用这种原型链机制,让一个对象(子类)可以继承另一个对象(父类)的属性和方法。

代码示例

// 定义父类Animal
function Animal(name) {
    this.name = name;
}

Animal.prototype.eat = function() {
    console.log(this.name + '正在吃东西');
};

// 定义子类Dog,继承自Animal
function Dog(name) {
    // 调用父类的构造函数,确保name属性正确初始化
    Animal.call(this, name);
}

// 设置Dog的原型为Animal的实例,实现继承
Dog.prototype = Object.create(Animal.prototype);
// 修正Dog.prototype.constructor,使其指向Dog
Dog.prototype.constructor = Dog;

// 为Dog添加bark方法
Dog.prototype.bark = function() {
    console.log(this.name + '正在汪汪叫');
};

// 创建Dog实例
const myDog = new Dog('旺财');
myDog.eat(); // 输出:旺财正在吃东西
myDog.bark(); // 输出:旺财正在汪汪叫