关于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,详情可以去看一下,这里我大致说一下,

首先请看

1     console.log(Object instanceof Object);  //true
2     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

原文地址:https://www.cnblogs.com/zidong/p/11411693.html

时间: 2024-10-11 13:20:23

关于Function和Object之间先后问题的相关研究的相关文章

JavaScript中Function和Object的关系

今天,QQ技术讨论群里面有一个人在聊天,说今天面试,面试官问他的第一个问题他就懵逼了,说是Function和Object的关系,或者说他们有什么区别.当时我微微一笑,心想这么简单的问题你都解释不清楚,那你竟然还有信心去面试.可是,当我试图组织语言来嘲讽他几句时,发现我也组织不清楚.痛定思痛,一步一步来屡一下他们之间的关系. 首先,Function是一个构造函数,那它一定就有它对应的原型对象Function.prototype,我们使用控制台打印可以得出Function.prototype=fun

javascript中的Function和Object

写的很好,理解了很多,特此转发记录 转自:http://blog.csdn.net/tom_221x/archive/2010/02/22/5316675.aspx 在JavaScript中所有的对象都继承自Object原型,而Function又充当了对象的构造器,那么Funtion和Object到底有着什麽样的关系呢 ? 首先,一切都是对象. 1 alert(Object instanceof Object); // true 2 alert(Function instanceof Objec

javascript中的Function与Object,function与object

function与object是数据类型,Function与Object是两个函数对象的标识符(等价于两个函数对象),Function与Object的数据类型都是function. 首先我们看下面的例子(typeof 表示数据类型,instanceof表示实例类型---用原型链查找): var a = function(){}; var b = {}; var c = 1; var d; var e = null; var f = false; var g = ""; console.

【JavaScript】JavaScript的Function与Object浅析

前言: JavaScript的面向对象是基于原形的,所有对象都有一条属于自己的原型链.Object与Function可能很多看Object instanceof Function , Function instanceof Object都为true而迷惑,所以首先看下对象的实例. 一.JS中所谓的实例 1. 如var a = new A();这样子通常的认为 “a为A函数的实例对象”. 2. new操作的过程是什么? 1.new创建一个空对象{}称为小C 2.然后将A.prototype放置到小

一张图看懂Function和Object的关系及简述instanceof运算符

我在写一篇图解prototype和__proto__的区别时,搜资料搜到了一个有意思的现象,下面这两个运算返回的结果是一样的: Function instanceof Object;//true Object instanceof Function;//true 这个是怎么一回事呢?要从运算符instanceof说起. 一.instanceof究竟是运算什么的? 我曾经简单理解instanceof只是检测一个对象是否是另个对象new出来的实例(例如var a = new Object(),a i

javascript中Function与Object

1. 先来一段代码: console.log(Function); // function Function() { [native code] } console.log(Object); // function Object() { [native code] } console.log(Function.prototype); // function () {} console.log(Object.prototype); // Object {} console.log(Function

【AngularJs】---"Error: [ng:areq] Argument 'fn' is not a function, got Object"

项目中把controller.service抽取出来 一步一步没有报错 index那里加 <script src="js/controllers/XXController.js"></script>就报错了 [原因] 我抽取出来的controller头部也这样写了 angular.module('gflt.controllers', []) 正确写法 angular.module('gflt.controllers') [AngularJs]---"E

XML与Object之间的互转

private static final String W3C_XML_SCHEMA_NS_URI = "http://www.w3.org/2001/XMLSchema"; /** 将对象转换成xml @param obj 要转成xml的对象 @param xsdPath 标准的xml文件就传null @return xml格式的字符串*/public static String objToXml(Object obj, String xsdPath) throws JAXBExce

Function,Object.creat();

一.Object.creat()使用方法 Object.creat(对象): 功能:实现继承,创建一个原型继承自参数的对象. 什么是原型式继承:就是利用修改原型链的结构(增加一个节点中的成员,删除一个节点中的成员,修改一个节点中的成员),来使得实例化对象可以使用整条链中的所有成员. 兼容方式: function inherit(obj){ if(Object.creat){ return Object.creat(obj); }else{ function F(){}; F.prototype=