彻底搞懂Object和Function的关系

2023-05-16

Object和Function的关系其实属于原型链的知识范畴,如果对于原型链、原型继承还不熟悉的话,可以戳这边o( ̄▽ ̄)o

Object、Function和其它对象的关系可以归纳为下面四点:

  1. 一切对象都最终继承自Object对象,Object对象直接继承自根源对象null
  2. 一切函数对象(包括Object对象)都直接继承自Function对象
  3. Object对象直接继承自Function对象
  4. Function对象直接继承自己,最终继承自Object对象

是不是感觉有点绕,下面我会逐点解释(下面的"一切对象"指除null的其它一切对象):

1. 一切对象都最终继承自Object对象,Object对象直接继承自根源对象null

下面两点可以佐证:

1)一切对象的原型链最终都是.... → Object.prototype → null。例如定义一个num变量var num = 1,则num的原型链为x → Number.prototype → Object.prototype → null; 定义一个函数对象fnfunction fn() {},则fn的原型链为fn → Function.prototype → Object.prototype → null;等等...

2)一切对象都包含有Object的原型方法,Object的原型方法包括了toString、valueOf、hasOwnProperty等等,在js中不管是普通对象,还是函数对象都拥有这些方法,下面列出了几个例子,大家可以自行去举例验证:

2. 一切函数对象(包括Object对象)都直接继承自Function对象

函数对象包括了Function、Object、Array、String、Number,还有正则对象RegExp、Date对象等等,它们在js中的构造源码都是function xxx() {[native code]);,Function其实不仅让我们用于构造函数,它也充当了函数对象的构造器,甚至它也是自己的构造器。

从原型链可以佐证:

js中 对象.__proto__ === 构造器.prototype,由此可以见得它们之间的关系。

疑:Object对象都继承自Function对象了,而一切对象又都继承自Object对象,这边是不是有矛盾,Object对象和Function对象的关系是不是有点♂复♀杂?

答:其实疑问的内容就是上面结论的三四点,它们没有矛盾,关系也不复杂。

  1. 一切对象都继承自Object对象是因为一切对象的原型链最终都是.... → Object.prototype → null,包括Function对象,只是Function的原型链稍微绕了一点,Function的原型链为Function → Function.prototype → Object.prototype → null,它与其它对象的特别之处就在于它的构造器为自己,即直接继承了自己,最终继承于Object,上面的原型链可以在浏览器验证:

2. Object继承自Function,Object的原型链为 Object → Function.prototype → Object.prototype → null,原型链又绕回来了,并且跟第一点没有冲突。可以说Object和Function是互相继承的关系。

3、4点的解答在第2点中

疑问

1)一切对象继承自Object,Object又继承自Function,那一切对象是不是都有Function的原型方法?

答:不对,普通对象都没有Function的原型方法。从我们所写原型链中可以看出,Object是继承自Function,而Object也有Function的原型方法(比如bind),但Object继承得到的方法储存于__proto__属性中,普通对象从Object继承到的原型方法却在于prototype属性中,因而不对。

2)Function对象怎么那么怪,自己继承自己?

答:就是 就是。

总结

Object对象直接继承自Function对象,一切对象(包括Function对象)直接继承或最终继承自Object对象。

(有说得不够清楚或者错误的地方,欢迎拍砖~)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

彻底搞懂Object和Function的关系 的相关文章

  • caffe添加python数据层

    caffe添加python数据层 xff08 ImageData xff09 在caffe中添加自定义层时 xff0c 必须要实现这四个函数 xff0c 在C 43 43 中是 xff08 LayerSetUp xff0c Reshape
  • 【SpringBoot】面试必杀技-泰山陨石坠,SpringBoot中主启动类的run方法启动流程是什么?

    开头导语由Chatgpt完成 当今互联网行业中 xff0c Java后端开发岗位的竞争异常激烈 xff0c 对于面试者来说 xff0c 掌握一些技巧和知识点将有助于脱颖而出 而对于SpringBoot框架的使用和运行机制 xff0c 更是J
  • node 爬虫,使用 Google puppeteer 抓取 One一个 的网页数据

    puppeteer 就不多介绍了 xff0c 就是一个无界面化的谷歌浏览器 作者本人是前端 xff0c 后端方面的知识不太擅长 xff0c 感觉漏洞还是蛮多的 本教程是作者见猎心喜然后把玩了一下写的 xff0c 有不合理的地方还请包涵 爬虫
  • 微信指纹支付原理浅析

    微信指纹支付从设备出厂到完成支付大致可以分成4个步骤 3对公私钥 xff1a 1 设备出厂公私钥及tee适配 手机厂商在手机tee的RPMB区域内置私钥A priv及微信支付的特定ta和SoterKeyStore xff0c 然后厂商统一将
  • 三极管打造树莓派温控风扇

    为了防止树莓派长时间开机运转温度过高导致触发过热关机 xff0c 很多人都给装了散热风扇 xff0c 但某宝买的风扇插上之后是随着开机一直运转的 xff0c 不能随温度变化而自动开闭 xff0c 很多时候做无用功浪费电且产生噪音 本文将以一
  • PostgreSQL 辟谣存在任意代码执行漏洞:消息不实

    开发四年只会写业务代码 xff0c 分布式高并发都不会还做程序员 xff1f gt gt gt 近期在互联网媒体上流传 PostgreSQL 存在任意代码执行的漏洞 xff1a 拥有 pg read server files 权限的攻击者可
  • vue slot撸一撸

    为什么80 的码农都做不了架构师 xff1f gt gt gt vue使用过程中接触到slot xff0c 一番操作下有以下记录 xff1a 单个 xff1a 父组件引用子组件的时候 xff0c 写在子组件中的内容插入到了子组件中的slot
  • Nmap扫描结果的保存和输出

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 选项解释 oN标准保存 oXXML保存 oGGrep保存 oA保存到所有格式 append output补充保存文件 选项 oG 将结果Grep保存 nmap F oG t
  • SQL岗位30个面试题,SQL面试问题及答案

    SQL岗位30个面试题 xff0c SQL面试问题及答案 xff1a 什么是SQL xff1f SQL xff08 结构化查询语言 xff09 是一种设计用于检索和操作数据的数据库 它属于美国国家标准协会 xff08 ANSI xff09
  • nginx搭建点播视频(Mp4播放)

    首先 xff0c 环境中必然要有gcc c 43 43 环境 yum y install gcc c 43 43 1 使用openresty 这里使用的是1 11 2 1版本的openresty和1 0 2版本的openssl root 6
  • ajax提交 的编码小结

    今天用ajax的post方法提交数据给webservice 由于有email的缘故发现 注册方法调用总是报错 打开报文一看提交的 发现 64 符号被变成了 40 abc 64 126 com 即abc 40126 com 开始我还以为他没有
  • [JavaScript]Cookie详解(转)

    cookie概述 假如利用一个不变的框架来存储购物栏数据 xff0c 而商品显示页面是不断变化的 xff0c 尽管这样能达到一个模拟全局变量的功能 xff0c 但并不严谨 例如在导航框架页面内右击 xff0c 单击快捷菜单中的 刷新 命令
  • 面试组合技-月色血风暴,什么是Spring中的循环依赖?怎么解决循环依赖?

    x1f484 x1f484 x1f484 今年的铜三铁四到了 xff0c 给大家写几篇面试题解析 文章目录 x1f460 什么是Spring中的循环依赖 xff1f x1f462 Spring怎么解决循环依赖 xff1f x1f455 流程
  • matlab练习程序(矩阵生成有向网络图)

    早知道有向图和无向图差别没有想象中的大我就写到一起了 函数中使用的arrow画箭头函数是在这个网站下的 函数名netplot 使用方法输入请help netplot 无返回值 函数只能处理有向图 作者 xff1a tiandsp 最后修改
  • 字符串处理memchr和memrchr

    memchr extern void memchr const void buf int ch size t count 功能 xff1a 从buf所指内存区域的前count个字节查找字符ch 说明 xff1a 当第一次遇到字符ch时停止查
  • 计算多轴飞行器最大悬停时间

    以结果为导向 xff1a 先看下面截图 为了方便看清楚 xff0c 下面截图承接上面截图的 悬停时间公式 xff1a 电池容量 每个电机总电流之和 61 悬停时间 以上面第一个为例 电池容量为22000maH 每个电机总电流之和是什么意思呢
  • linux应用之make命令详解

    从源代码安装过软件的朋友一定对 configure amp amp make amp amp make install 安装三步曲非常熟悉了 然而究竟这个过程中的每一步幕后都发生了些什么呢 xff1f 今天小编将带你一探究竟 深入理解这个过
  • github 之 下载历史版本

    1 打开github中要下载的项目 2 点击commits 点击上图中标记的地方 xff0c 进入下图所示 xff1a 3 选择列表中的某个版本 4 Browse Files 5 下载 点击上图中的 Download ZIP 下载 转载于
  • Linux环境C程序设计(第2版)

    2019独角兽企业重金招聘Python工程师标准 gt gt gt Linux 环境 C 程序设计 xff08 第 2 版 xff09 共分 6 篇 第 1 篇 介绍了 Linux 系统的安装及 LinuxC 开发环境的搭建等 xff1b
  • 如何准备校招技术面试

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 如何准备校招技术面试 标签 xff1a 面试 TOC 2017 年互联网校招已近尾声 xff0c 作为一个非 CS 专业的应届生 xff0c 零 ACM 经验 零期刊论文发

随机推荐