为什么Object.prototype在Function的原型链上与Function.prototype在Object的原型链上都为true

本文解析了JavaScript中Object instanceof Function与Function instanceof Object为true的原因。通过分析Object与Function的原型链,解释了这两种情况如何成立。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于javascript的原型链有一个问题我一直很疑惑:
为什么 Function instanceof Object 与 Object instanceof Function都为true呢?

Function instanceof Object // ->true
Object instanceof Function // ->true

先给个结论吧(函数a和对象b指什么看下去就直到了):
Object instanceof Function的实质就是函数a在Object的原型链上;
Function instanceof Object的实质就是对象b在Function的原型链上。

Function与Object的原型链

我是看了这个图才有所理解的:
(严格的说与本文相关的图只是红色框中的内容)

函数与对象的联系图-你不知道的JavaScript(上卷)171页截图

ps:你不知道的JavaScript(上卷)171页截图

先来说说为什么Object instanceof Function的结果为ture,即Function.prototype在Object的原型链上

Function这个内置函数的Function.prototype是一个函数a,因为函数同时也是对象,因此这个函数a也定义了apply、call、bind等属性(或者说方法)。而Object的委托目标Object.proto正是这个函数a,因此Object instanceof Function的结果为ture。

再来说说为什么Object.prototype在Function的原型链上,即Function instanceof Object为ture。

Object这个内置函数的Object.prototype是一个对象b,很多我们经常用到的属性(或者说方法)如:toString、valueOf、hasOwnProperty、isPrototypeOf就是定义在对象b上的。从图上可以看到,Function的委托目标竟然也是函数a(Function.prototype和Function.proto都指向函数a),而函数a的委托目标正是对象b,因此Function instanceof Object为ture。

到上面为止其实都只是看图说话而已,关系都已经在图上表示了,只是我觉得初看图也不好理解,尝试借助文字加强对图的理解而已。

简单来说就是**Object instanceof Function其实就是说函数a在Object的原型链上,
Function instanceof Object就是说对象b在Function的原型链上。**

Function与Object的委托目标都是函数a,而函数a的委托目标是对象b。

以下是我简化的图:

Function与Object的原型链
Object instanceof Function的实质就是函数a在Object的原型链上;
Function instanceof Object的实质就是对象b在Function的原型链上。
现在看来,Object.prototype在Function的原型链上与Function.prototype在Object的原型链上都为true其实是一件挺自然的事。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值