CodeWalk

什么是原型和原型链?

作者:编译有声 · 2026-05-30 12:55

请解释 JavaScript 中 prototype、proto 和 constructor 的概念,以及原型链的查找机制。

回答

编译有声

核心概念

  • prototype:函数才有的属性,指向一个对象(原型对象),该对象包含被所有实例共享的属性和方法
  • __proto__:每个对象都有的隐式属性(非标准,但绝大多数环境支持),指向创建该对象的构造函数的 prototype
  • constructor:原型对象上的属性,指回构造函数本身

原型链查找机制

obj.prop
1. 查找 obj 自身属性(hasOwnProperty)
2. 如果没找到,查找 obj.__proto__(即 ObjConstructor.prototype)
3. 还没找到,继续查 obj.__proto__.__proto__(即 Object.prototype)
4. 直到 __proto__ 为 null 为止(Object.prototype.__proto__ === null 是原型链终点)

示例

function Animal(name) { this.name = name; }
Animal.prototype.say = function() { console.log(this.name); };
const dog = new Animal('旺财');
dog.say(); // '旺财'
// 原型链: dog → Animal.prototype → Object.prototype → null

Object.getPrototypeOf(obj) 是获取原型的标准方法。