函数构造函数原型链疑问:为何未指向Function.prototype?
原型链疑惑解惑
你混淆了实例对象的原型链和函数对象自身的原型链,这是两条完全独立的路径,分开来看就清楚了:
1. 实例name的原型链
name是通过new Fun2()创建的普通对象(不是函数),它的原型链遵循「实例 -> 构造函数的prototype -> Object.prototype -> null」:
name.__proto__指向Fun2.prototype(因为Fun2是name的构造函数)Fun2.prototype本身是一个默认的普通对象(本质是Object的实例),所以它的__proto__指向Object.prototype- 最终
name.__proto__.__proto__ === Object.prototype,这完全符合预期。
2. 函数Fun2自身的原型链
Fun2作为函数对象,所有函数都是Function构造函数的实例,它的原型链是「函数对象 -> Function.prototype -> Object.prototype -> null」:
- 验证一下:
你看,console.log(Fun2.__proto__ === Function.prototype); // 输出 true console.log(Fun2.__proto__.__proto__ === Object.prototype); // 输出 trueFun2并没有跳过Function.prototype这一步,只是你之前看的是实例name的链,不是Fun2自身的链。
关键区分点
- 实例对象的原型链,终点是
Object.prototype - 函数对象的原型链,会先经过
Function.prototype,再到Object.prototype - 不要把「构造函数的原型(
Fun2.prototype)」和「构造函数自身的原型(Fun2.__proto__)」搞混,这是两个完全不同的属性。
内容的提问来源于stack exchange,提问作者j obe
相关产品推荐
相关产品推荐

