为何f.__proto__ instanceof Function返回false?JavaScript原型疑问
为什么
f.__proto__ instanceof Function返回false? 你对instanceof的核心逻辑理解是对的:A instanceof B本质是检查B.prototype是否存在于A的整条原型链上,但这里你忽略了JavaScript里一个特殊的对象特性——Function.prototype本身并不是Function的实例。
我们一步步拆解你的代码:
- 首先,
f是一个普通函数,所以f.__proto__直接指向Function.prototype,这也是第一个console.log返回true的原因。 - 当你执行
f.__proto__ instanceof Function时,其实等价于判断Function.prototype instanceof Function。 - 按照
instanceof的规则,我们需要验证:右侧Function的原型(也就是Function.prototype)是否出现在左侧对象(还是Function.prototype)的原型链上?
现在看Function.prototype的完整原型链:Function.prototype → Object.prototype → null
很明显,Function.prototype并没有出现在自己的原型链里,所以这个判断自然返回false。
额外补充个小知识点:虽然typeof Function.prototype会返回"function"(它是一个特殊的函数对象),但它并不是通过new Function()创建的,因此它的原型链不会指向自身——这也是它和普通函数实例的核心区别:普通函数实例的__proto__是Function.prototype,而Function.prototype的__proto__是Object.prototype。
内容的提问来源于stack exchange,提问作者user1855287
相关产品推荐
相关产品推荐

