1. 什么是原型 (Prototype)?
- 每个函数都有一个
prototype属性,指向原型对象 - 原型对象包含共享的属性和方法
- 实例通过
__proto__访问其构造函数的原型
2. 什么是原型链?
- 当访问对象属性时,如果对象本身没有,会通过
__proto__向上查找 - 直到找到
Object.prototype(顶层原型,__proto__为null) - 这种链式查找机制称为原型链

3. 查找逻辑
- 第一站:在
person对象自身找。 - 第二站:顺着
person.__proto__找到Person.prototype找。 - 终点站:顺着链条一直找到
Object.prototype。如果到null还没找到,返回undefined。
4. 示例代码
prototype:函数特有的属性,指向它的原型对象,里面存放着所有实例共享的方法。__proto__:对象特有的属性,指向创建它的构造函数的prototype。实例.proto === 构造函数.prototype
原型对象.constructor === 构造函数本身
javascript
function Person(name) {
this.name = name;
}
Person.prototype.sayHello = function() {
console.log(`Hello, I'm ${this.name}`);
};
const person = new Person('Alice');
person.sayHello(); // 通过原型链访问方法
console.log(person.__proto__ === Person.prototype); // true
console.log(Person.prototype.__proto__ === Object.prototype); // true
console.log(Object.prototype.__proto__); // null5. 深度理解 new
当执行 new Student() 时,JS 做了三件事:
- 创建一个空对象。
- 连线:将新对象的
__proto__指向Student.prototype。 - 注入:将
this指向新对象并运行构造函数代码。
6. 函数的本质
函数是一等公民:它既可以像普通对象一样拥有
__proto__(指向Function.prototype),又因为它是构造函数,所以拥有prototype。原型链终点:
Object.prototype.__proto__ === null。
这是面试中最高频的问题之一,建议熟练背诵并能手画原型链图。