面试题答案
一键面试在JavaScript中,利用prototype
特性实现对象间继承的步骤如下:
-
定义父构造函数:
- 父构造函数用于初始化父对象的属性和方法。
-
定义子构造函数:
- 子构造函数用于初始化子对象的属性,并且要通过
call
或apply
方法调用父构造函数,以确保继承父对象的属性。
- 子构造函数用于初始化子对象的属性,并且要通过
-
设置原型链:
- 将子构造函数的
prototype
设置为父构造函数的一个实例,这样子对象就能访问父对象原型上的方法。
- 将子构造函数的
-
修正构造函数指向:
- 由于将子构造函数的
prototype
设置为父构造函数的实例后,子构造函数的prototype.constructor
会指向父构造函数,所以需要手动将其修正为指向子构造函数。
- 由于将子构造函数的
以下是具体代码示例:
// 1. 定义父构造函数
function Animal(name) {
this.name = name;
}
// 给父构造函数的原型添加方法
Animal.prototype.speak = function() {
console.log(this.name +'makes a sound.');
};
// 2. 定义子构造函数
function Dog(name, breed) {
// 调用父构造函数,继承属性
Animal.call(this, name);
this.breed = breed;
}
// 3. 设置原型链
Dog.prototype = new Animal();
// 4. 修正构造函数指向
Dog.prototype.constructor = Dog;
// 给子构造函数的原型添加方法
Dog.prototype.bark = function() {
console.log(this.name +'barks.');
};
// 创建一个Dog实例
const myDog = new Dog('Buddy', 'Golden Retriever');
myDog.speak(); // 输出: Buddy makes a sound.
myDog.bark(); // 输出: Buddy barks.