欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

疑惑:为什么 Function instanceof Object 与 Object instanceof Function都为true呢?

程序员文章站 2022-05-16 10:22:04
关于javascript的原型链有一个问题我一直很疑惑: 为什么 function instanceof object 与 object instanceof function都...

关于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 instanceof Object 与 Object instanceof Function都为true呢?

我是看了这个图才有所理解的:

(严格的说与本文相关的图只是红色框中的内容)

疑惑:为什么 Function instanceof Object 与 Object instanceof Function都为true呢?

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 instanceof Object 与 Object instanceof Function都为true呢?

object instanceof function的实质就是函数a在object的原型链上;

function instanceof object的实质就是对象b在function的原型链上。

现在看来,object.prototype在function的原型链上与function.prototype在object的原型链上都为true其实是一件挺自然的事。