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 等污染)。