zoukankan      html  css  js  c++  java
  • 为什么Object.prototype在Function的原型链上与Function.prototype在Object的原型链上都为true

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

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

     

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

     

    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。

    以下是我简化的图:


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

  • 相关阅读:
    【算法】二分图的判定
    【模板】并查集 两种路径压缩写法(类模板和函数模板)
    【模板】堆的结构
    新疆大学OJ(ACM) 1099: 数列有序!
    新疆大学OJ(ACM) 1047: string 字符串排序
    新疆大学(新大)OJ xju 1010: 四个年级 C++ STL map 将4层循环优化成2层循环可解
    新疆大学(新大)OJ xju 1009: 一带一路 prim求最短路径+O(n)素数筛选
    新疆大学(新大)OJ xju 1006: 比赛排名 第二类斯特林数+阶乘
    【算法】第二类斯特林数Stirling
    【复习资料】编译原理中:短语,直接短语,句柄
  • 原文地址:https://www.cnblogs.com/zhishaofei/p/11704167.html
Copyright © 2011-2022 走看看