原型链是 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 语法与原型继承的关系(语法糖)、hasOwnProperty 与 in 的区别。