面试题答案
一键面试原型链实现对象继承的基本原理
在JavaScript中,每个对象都有一个 __proto__
属性,它指向该对象的原型对象。当访问一个对象的属性或方法时,如果该对象本身没有这个属性或方法,JavaScript会沿着 __proto__
链向上查找,直到找到该属性或方法,或者到达原型链的顶端(null
)。
通过将子类的原型对象设置为父类的实例,子类就可以继承父类的属性和方法。这样,当在子类实例上访问属性或方法时,如果子类自身没有定义,就会从父类的原型对象中查找。
代码示例
// 定义父类
function Animal(name) {
this.name = name;
}
Animal.prototype.speak = function() {
console.log(this.name +'makes a sound.');
};
// 定义子类
function Dog(name, breed) {
// 调用父类构造函数,绑定this
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(); // 输出: Buddy makes a sound.
console.log(myDog.breed); // 输出: Golden Retriever