面试题答案
一键面试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(); // 输出:旺财正在汪汪叫