面试题答案
一键面试原型链与构造函数共享属性和方法原理
- 构造函数与原型对象:在JavaScript中,每个函数都有一个
prototype
属性,这个属性指向一个对象,称为原型对象。当使用构造函数创建实例时,实例的__proto__
属性会指向构造函数的原型对象。 - 属性和方法查找:当访问实例的属性或方法时,JavaScript 引擎首先在实例自身上查找。如果找不到,就会沿着
__proto__
指向的原型对象查找。如果在原型对象中找到了对应的属性或方法,就会使用它。这样,多个实例可以共享原型对象上的属性和方法。
代码示例
// 定义构造函数
function Person(name) {
this.name = name;
}
// 在原型对象上定义共享方法
Person.prototype.sayHello = function() {
console.log(`Hello, I'm ${this.name}`);
};
// 创建两个实例
const person1 = new Person('Alice');
const person2 = new Person('Bob');
// 调用共享方法
person1.sayHello(); // 输出: Hello, I'm Alice
person2.sayHello(); // 输出: Hello, I'm Bob
在上述代码中,sayHello
方法定义在Person.prototype
上,person1
和person2
两个实例都可以调用这个方法,因为它们的__proto__
都指向Person.prototype
。这就是通过原型链实现多个实例对象共享属性和方法的机制。