关于Function和Object之间先后问题的相关研究
文章说明,博主是一个前端小白,本片文章是博主在学习的过程中碰到的疑惑,根据查找的资料,之后得出的个人结论,文中如果出现错误,欢迎指正。
-------路漫漫其修远兮吾将上下而求索,与诸君共勉--------
js中Function和Object的问题
首先了解,原型的概念,所谓的原型,其实就是一个对象的本质,既然是对象的本质,那么说明原型的本身就是一个对象,
(注:这里是作者本人的个人理解,原型就像是一个模具,通过想象,当一个实例对象被创建的时候,首先是由构造函数产生一个最初的对象模子,然后,我们根据这个模具开始我们个人的加工,使的这个模具更加符合我们的要求,最后在加工完成之后,才是根据原型,生产出最终的实例化对象)
所以我们得出一个结论:每一个函数都会有一个prototype属性,即每一个函数对会有一个对象的原型。(因为构造函数与普通函数的区别就是首字母是否大写的区别)



console.log(Object instanceof Object); //true
console.log(Object.prototype instanceof Object); // false
自盘古开天辟地,js中并不是就有了Object, 而是Object.prototype。 js中的万物(原始值除外)都是继承自Object,唯独一个对象例外,那就是Object.prototype。
这段话取自https://bbs.csdn.net/topics/390772104,详情可以去看一下,这里我大致说一下,
首先请看
console.log(Object instanceof Object); //true
console.log(Object.prototype instanceof Object); // false
通过上面的代码返回的结果,我们首先可以确定一个事情,那就是,Object.prototype 并不是object的实例
好的,然后我们接着看
Object.getPrototypeOf(Object) === Function.prototype //全等哦 true
Object.getPrototypeOf(Function.prototype) === Object.prototype //全等哦 true
console.log(Object.getPrototypeOf(Object) === Object.getPrototypeOf(Function)); //全等哦 true
上面的代码结果说明了,Function和Object的原型其实是一致的。
大致流程图如下:


伪代码大致是这样,create元操作的含义是使用给定的对象作为原型构造一个新的对象
var ObjectPrototype = create( ); // 开天辟地 var FunctionPrototype = create( ObjectPrototype );
//FunctionPrototype(后被赋值给了Function.prototype)是Object类型的
//因为其原型是ObjectPrototype var Function = create( FunctionPrototype ); Function.prototype = FunctionPrototype;
// Function是Function类型的,也是Object类型的
//言外之意,Function对象 原型链上有Function.prototype和Object.prototype Object = create( FunctionPrototype ); Object.prototype = ObjectPrototype;
//Object是Function类型的,也是Object类型的
//言外之意Object对象的原型链上有Function.prototype和Object.prototype
对上面的图和伪代码进行总结,最开始利用create()构建出ObjectPrototype,然后利用ObjectPrototype构造出FunctionPrototype,接着利用FunctionPrototype构造出最重要的两个函数对象,最后将ObjectPrototype指向Object.prototype。FunctionPrototype指向Function.prototype。到此为止,构成一个奇怪的循环。
为了更加了解这Function和Object之间的关系,我从另一篇文章,找到补充知识。以下内容参照自链接:https://www.jianshu.com/p/5f57dd643bfd


关于Function和Object之间先后问题的相关研究的更多相关文章
- Object instanceof Function和Function instanceof Object
首先需要确定的是,instanceof是根据原型链来判断是否为某引用类型的实例.所以需要明白Object和Function之间的关系,以下为引用某博客的图片,阐述了javascript对象体系的关系 ...
- Function与Object的关系
这里先简单介绍一下我研究这个问题的初衷.起初我只是想研究一下原型链的基本思想.构造函数拥有prototype属性,指向它的prototype,而该构造函数的实例化对象则拥有一个[[prototype] ...
- Function和Object 应该知道的
javascript有5种基础的内建对象(Fundamental Objects),Object.Function.Error.Symbol.Boolean,而Object/Function尤为特殊, ...
- javascript中的Function和Object
写的很好,理解了很多,特此转发记录 转自:http://blog.csdn.net/tom_221x/archive/2010/02/22/5316675.aspx 在JavaScript中所有的对象 ...
- 【JavaScript】JavaScript的Function与Object浅析
前言: JavaScript的面向对象是基于原形的,所有对象都有一条属于自己的原型链.Object与Function可能很多看Object instanceof Function , Function ...
- Function,Object.creat();
一.Object.creat()使用方法 Object.creat(对象): 功能:实现继承,创建一个原型继承自参数的对象. 什么是原型式继承:就是利用修改原型链的结构(增加一个节点中的成员,删除一个 ...
- JavaScript之Function 和 Object 的区别和联系
1.先看一个控制台的输出: instanceof 运算符字面意思是 左边是右边的一个实例吗? 但是这两条输出让人很困惑.Function 是 Object 的实例.Object 也是 Function ...
- 一张图看懂Function和Object的关系及简述instanceof运算符
我在写一篇图解prototype和__proto__的区别时,搜资料搜到了一个有意思的现象,下面这两个运算返回的结果是一样的: Function instanceof Object;//true Ob ...
- javascript中Function与Object
1. 先来一段代码: console.log(Function); // function Function() { [native code] } console.log(Object); // f ...
随机推荐
- [leetcode] 120. Triangle (Medium)
原题 思路: dp,从下往上依次取得最小的,取到最上面的,就是一条最小的路径. class Solution { public: int minimumTotal(vector<vector&l ...
- #!/usr/bin/env bash和#!/usr/bin/bash的比较
#!/usr/bin/env bash和#!/usr/bin/bash的比较 stackoverflow: http://stackoverflow.com/questions/16365130/th ...
- [NLP] 相对位置编码(二) Relative Positional Encodings - Transformer-XL
参考: 1. Transformer-XL: Attentive Language Models Beyond a Fixed-Length Context https://arxiv.org/pdf ...
- python基础——列表(list)
序列是Python中最基本的数据结构.序列中的每个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推. Python有6个序列的内置类型,但最常见的是列表和元组. 序列 ...
- web设计_1_思路总览
核心思想:结构和样式分离 HTML与CSS 只有充分将页面核心内容和外观设计相分离而获得的灵活性,才能顺利构建出能够满足每个web用户需要的最佳设计方案. 核心要求:灵活性 适应不同的浏览器,适应各种 ...
- Rust生命周期bound用于泛型的引用
在实际编程中,可能会出现泛型引用这种情况,我们会编写如下的代码: struct Inner<'a, T> { data: &'a T, } 会产生编译错误: error[E0309 ...
- Filebeat6.3文档—Log input配置
Filebeat6.3文档-Log input配置 paths 日志加载的路径.例如加载某一子目录级别下面路径的日志:/var/log/*/*.log.这表示会去加载以.log结尾的/var/log下 ...
- DataOps系列丨数据的“资产负债表”与“现状”
作者:DataPipeline CEO 陈诚 <跨越鸿沟>的作者Geoffrey Moore曾说“没有数据,运营企业就像一个又聋又瞎的人在高速上开车一样”.数据的价值从未像现在这样被企业重 ...
- [ PyQt入门教程 ] PyQt5基本控件使用:消息弹出、用户输入、文件对话框
本文主要介绍PyQt界面实现中常用的消息弹出对话框.提供用户输入的输入框.打开文件获取文件/目录路径的文件对话框.学习这三种控件前,先想一下它们使用的主要场景: 1.消息弹出对话框.程序遇到问题需要退 ...
- Java 8 Stream实践
[**前面的话**]Java中的Stream于1.8版本析出,平时项目中也有用到,今天就系统的来实践一下.下面借用重庆力帆队伍中我个人比较喜欢的球员来操作一波,队员的年龄为了便于展示某些api做了调整 ...