Function与Object的关系
这里先简单介绍一下我研究这个问题的初衷。起初我只是想研究一下原型链的基本思想。构造函数拥有prototype属性,指向它的prototype,而该构造函数的实例化对象则拥有一个[[prototype]]属性,或者说__proto__属性,同样指向该构造函数的prototype。所谓prototype,我个人把它理解为Java语言的类概念中的方法或是常量的集合,JS语言设计者之所以这么做,我想是因为考虑到对象的本质问题。对象的存储只涉及到其拥有的变量(这在对象序列化中体现的淋漓尽致),因为方法这种不变的共有的东西无需携带,只需放在类里。JS和Java语法虽然有差异,但是所遵循的OO思想本质上并无不同。所以我认为,JS的prototype就是实现了这么一个构造外的机制,而构造函数实现了真正的变量赋值功能以及初始化功能。但是,仅仅只是这样吗?NO!虽然核心的原理就这些,但是JS还拥有一些附加的属性在构造函数和对象上,这些属性就是JS独特的魅力与灵活性所在。因此,当我一路追寻下去时,终于发现了存在于JS中的构造函数与对象之间的“猫腻”,而这次的所有发现都是基于原型链所展开的。下面将把我所看到的现象展示出来,它们的确有趣的很。

同样是构造函数,普通的Person构造仍然是Function的一个实例对象;而Function构造,是原本就有的,JS内置的包装类,它同时也是一个对象,且称为函数对象,JS中一切皆对象的思想在这里体现的淋漓尽致。没错,JS就是这样一种语言,质朴而纯洁,丝毫不会掩饰什么,如果你看不懂它,只因为你没有坦然面对自己罢了。继续,Person函数的__proto__属性也指向Function.prototype对象。也就是说,所有的函数,包括Function构造函数在内,其终极__proto__属性都是指向Function.prototype的。只有Function.prototype对象的__proto__指针才指向Object的原型。


从以上运行结果可以看出:所有的函数,包括浏览器实现或是定义的类的构造函数,包装类等,甚至于Object函数——一切构造函数的__proto__指向都是Function.prototype。这样看来,Function俨然成就了一番“一统天下”的气象,然而,它只不过是一人之下,万人之上,与Object之间也是伯仲之间,虽然它是Object的实例,但是Object对象的构造又属于Function的实例。可谓,你中有我,我中有你,水乳交融,十分亲密。其实话又说回来,本质上这些概念与Java中的.class很类似,都是Class对象,都是Function对象,Class是Object,Function.prototype又是Object,诸如此类概念,随处可见,仅此而已。JavaScript之所以以Java开头,的确是有缘故的。最后,我们还是要说一个共同的终极话题。终究呢,如一句名言所说——“万物皆归于无”。Object.prototype就已经到顶了,这是我们所能接触到的,所能看到的。若穷其理,再追究下去,Object.prototype.__proto__就指向了null,最终指向了空。
Function与Object的关系的更多相关文章
- 一张图看懂Function和Object的关系及简述instanceof运算符
我在写一篇图解prototype和__proto__的区别时,搜资料搜到了一个有意思的现象,下面这两个运算返回的结果是一样的: Function instanceof Object;//true Ob ...
- JS原型的问题Object和Function到底是什么关系
var F = function(){}; Objcert.prototype.a = function(){}; Function.prototype.b = function(){}; F 既能访 ...
- Javascript中的函数(Function)与对象(Object)的关系
今天我们来尝试理解Function和Object.因为这个里面有些人前期可能会搞糊涂.他们之间到底是什么关系.当然也不除外当初的我. 注意:官方定义: 在Javascript中,每一个函数实际上都是一 ...
- 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 ...
- Object instanceof Function和Function instanceof Object
首先需要确定的是,instanceof是根据原型链来判断是否为某引用类型的实例.所以需要明白Object和Function之间的关系,以下为引用某博客的图片,阐述了javascript对象体系的关系 ...
- JavaScript之Function 和 Object 的区别和联系
1.先看一个控制台的输出: instanceof 运算符字面意思是 左边是右边的一个实例吗? 但是这两条输出让人很困惑.Function 是 Object 的实例.Object 也是 Function ...
- 关于Function和Object之间先后问题的相关研究
文章说明,博主是一个前端小白,本片文章是博主在学习的过程中碰到的疑惑,根据查找的资料,之后得出的个人结论,文中如果出现错误,欢迎指正. -------路漫漫其修远兮吾将上下而求索,与诸君共勉----- ...
- Function和Object 应该知道的
javascript有5种基础的内建对象(Fundamental Objects),Object.Function.Error.Symbol.Boolean,而Object/Function尤为特殊, ...
随机推荐
- 【JSP/Servlet】后台如何获取复选框或可选属性的同名参数
感觉自己jsp/servlet部分学的太差了--今天突然想到还有这种操作,遂分享之 比如有些时候我们需要使用复选框发送同名数据的时候,后台接收参数是个麻烦事,还有可选属性也是如此 有丰富经验的会想到a ...
- 每天一个linux命令(34):du 命令
Linux du命令也是查看使用空间的,但是与df命令不同的是Linux du命令是对文件和目录磁盘使用的空间的查看,还是和df命令有一些区别的. 1.命令格式: du [选项][文件] 2.命令功能 ...
- 在iOS App 中添加启动画面
你可以认为你需要为启动画面编写代码,然而Apple 让你可以非常简单地在Xcode中完成.不需要编写代码,你仅需要在Xcode中进行一些配置. 1.什么是启动画面(Splash Screen)? 启动 ...
- NPM使用命令总结
NPM使用命令总结 npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准.有了npm,可以很快的找到特定服务要使用的包,进行下载.安装以及管理已经安装的包. 1.npm ...
- CROS跨域请求处理
1.什么是跨域? 跨域是指从一个域名的网页去请求另一个域名的资源.比如从www.baidu.com 页面去请求 www.google.com 的资源.跨域的严格一点的定义是:只要 协议,域名,端口有任 ...
- js 原型 函数和对象的关系
函数就是对象的一种 instanceof 可以做判断 var fn = function(){}; fn instanceof Object //true Object构造函数的prototype ...
- [搬运] .NET Core 2.1中改进的堆栈信息
原文 : Stacktrace improvements in .NET Core 2.1 作者 : Ben Adams 译者 : 张很水 . NET Core 2.1 现在具有可读的异步堆栈信息!使 ...
- nc简单应用
传输本地文件test到172.19.135.12: 172.19.135.12接收端 nc -l 1234 > test 本地为 发送端 nc 172.19.135.12 1234 & ...
- js禁止滚动条移动
js禁止滚动条移动 var scrollFunc=function(e){ e=e||window.event; if (e&&e.preventDefault){ e.prevent ...
- JavaSE基础篇—MySQL三大范式—数据库设计规范
1.概 念 范式是一种符合设计要求的总结,要想设计一个结构合理的关系型数据库,必须满足一定的范式.各个范式是以此嵌套包含的,范式越高,设计等级越高,在现实设计中也越难实现,一般数据库只要打 ...