原型链是 JavaScript 实现属性继承的机制。每个对象都有一个内部链接 [[Prototype]](可通过 __proto__Object.getPrototypeOf 访问)指向其原型对象;读取对象属性时,若自身没有,就沿原型逐级向上查找,直到 Object.prototype(其原型为 null)为止,这条查找路径就是原型链。找不到则返回 undefined

关键点:

  • 函数的 prototype 属性与实例的 __proto__ 指向同一个对象:obj.__proto__ === Obj.prototype
  • Object.create(proto) 可指定原型;
  • instanceof 就是沿原型链检查构造函数的 prototype 是否出现;
  • 方法定义在原型上可被所有实例共享,避免每个实例重复创建。

易错点:__proto__ 是历史遗留访问器,正式代码应用 Object.getPrototypeOf/setPrototypeOf;原型链过长会带来查找开销。追问方向:class 语法与原型继承的关系(语法糖)、hasOwnPropertyin 的区别。