白狗子的博客

「天上浮云如白衣,斯须改变如苍狗。」——杜甫

JavaScript-面试-原型与原型链

2026年10月16日·Admin·2 次浏览

面试题:原型与原型链是什么?__proto__ 和 prototype 区别?

常见问法

  • 「说说原型链」
  • 「instanceof 判断依据?」
  • 「Object.create(null) 用来干什么?」

核心概念

每个 对象 都有隐藏属性 [[Prototype]](浏览器可用 __proto__ 访问,标准写法是 Object.getPrototypeOf(obj)),指向自己的原型对象。

每个 函数(除箭头函数)有 prototype 属性,指向「当作为构造函数调用时,实例的原型」。

函数 Foo.prototype  ──→  普通对象 { constructor: Foo }
new Foo() 生成的实例 obj.__proto__ === Foo.prototype

原型链

读取属性时,若对象自身没有,沿 __proto__ 一层层向上找,直到 null。这条链就是原型链。

  • 终点:Object.prototype.__proto__ === null。
  • hasOwnProperty:只查自有属性,不沿链查找。

instanceof

A instanceof B:检查 B.prototype 是否在 A 的原型链上。
注意:跨 realm(iframe)、可修改 prototype 时可能不符合直觉。

Object.create(proto)

以 proto 作为新对象的 [[Prototype]]。传 null 得到无原型对象,适合 Map 字典(无继承来的 toString 等污染)。

© 2025 My Blog. Built with Nuxt.js v4