JavaScript中的Object到底是什么呢?

2016-02-19 16:16 7 1 收藏

下面图老师小编要向大家介绍下JavaScript中的Object到底是什么呢?,看起来复杂实则是简单的,掌握好技巧就OK,喜欢就赶紧收藏起来吧!

【 tulaoshi.com - Web开发 】

   前天有网友留言问我,Object是什么?由于这两天忙于重构那个TreeView控件去了,没有及时的回答,真是不好意思。今天抽空来看看JavaScript中的Object到底是什么东西呢?Object和函数Function到底是什么关系呢?说的不对的地方欢迎斧正。

    虽然是私人留言,不过匿名转过来希望不会怪我,如有不妥请告知。

 js的Object到底是什么?

 刚开始我认为Object是js的所有对象的原型。

 但是:alert(Object.constructor)显示function Function...

 这说明Object的原型是Function?

 但是问题又来了:

 Function.prototype.read=function(){};//扩展Function的原型
 for(var i in Object)alert(i)//显示read,这进一步证实了Object的原型是Function

 Object.prototype.read=function(){};//扩展Object的原型

 for(var i in Function)alert(i)//显示read,Function的原型是Object????

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

 Object到底是什么?做为类的Object与Function是一回事?

    这位朋友把Constructor、Prototype和Function搞混淆了,由于JavaScript是Object-based的语言(JavaScript does not contain proper classes)。说Object是所有对象的原形(prototype),其实是可以的,不过这里是指设计模式中的Prototype Pattern中的原形概念,而不是Object.prototype这个JavaScript的原形语言特性。

    那么JavaScript中的Object到底是什么东东呢?Script56.chm(就是M$官方教程)上说:提供所有 JScript对象通用的功能。恩,明白吗?因该是明白了,但友好像还是不明白@_@。如果我们从数据结构上来说,一个object(Object的实例)就是一个无序的集合,类似C++中的map、C#中的hashtable、Java中的hashmap这样一个结构。并且包含了一个JavaScript语言系统赋予的原始值,什么意思呢?Object有个方法叫做valueOf,它的功能是返回指定对象的原始值。这个也是可以在Script56中查到的,并且还有一个表格列举了系统对象的valueOf返回结果。也就是说,Array、Boolean、Date、Function、Number等等对象,其实都是从Object来的,它们的祖先都是Object。它们表现不同的语言特性,比如Array有被自动管理的length属性,Boolean只有true或false取值,Date表示时间结构,Function可以被运行,都是它们的原始类型(valueOf)赋予它们的能力。Object实际只是一个概念,JavaScript这个语言基于对象,是说所有内建类型都被抽象出了一组公用的方法和属性(也可以叫行为和状态),我们就想像只拥有这些特性的一个东西就是Object。实际上Object在编程中没有太大用处,我们都是在使用Object的实例object,然后使用Object的集合特性(expando),扩充object成为我们希望的东西。对于Object.prototype,其实并不怎么能用到,因为每个确切的类型都有自己的prototype,我们添加原形方法大都针对确定的类型。

    Object除了prototype外还有一个很重要的属性——constructor。这个东西就是用来完成我前面说到的对object的扩充用的,它也是我们使用JavaScript模拟OOP的基础。由于JavaScript中所有东西都是Object,所以constructor也是,不过它的原始类型是Function(运行Object.constructor.valueOf()得到:function Function() { [native code] })。当然反过来并不是所有的JavaScript对象都有constructor属性,一些内建对象没有constructor的说。

    对于Object和Function的关系,我认为这不是很好的检验代码:  Function.prototype.read=function(){};//扩展Function的原型

 for(var i in Object)alert(i)//显示read,这进一步证实了Object的原型是Function

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

 Object.prototype.read=function(){};//扩展Object的原型
 for(var i in Function)alert(i)//显示read,Function的原型是Object?

    这四行代码用来解释JavaScript的prototype的原理和模拟OO编程的原形继承方式比较sexy! 可是它们并不能清晰的说明Object和Function的关系:( 反而会愚弄视听。

    下面简述一下JavaScript中的各种对象类型:

    Native Object: JavaScript语言提供的不依赖于执行宿主的对象,其中一些是内建对象,如:Global、Math;一些是在脚本运行环境中创建来使用的,如:Array、Boolean、Date、Function、Number、Object、RegExp、Error。

    Build-in Object: JavaScript语言提供的不依赖于执行宿主的内建对象,如:Global、Math;内建对象都是Native Object。

    Host Object:JavaScript语言提供的任何依赖于宿主环境的对象,所有非Native Object的对象都是宿主对象,如:IE中的window,WScript中的wscript实例,任何用户创建的类

来源:http://www.tulaoshi.com/n/20160219/1611515.html

延伸阅读
一个美国人眼中的孕妇防辐射服 对很多中国人而言,此事的重大意义之一在于,至此才第一次知道,西方的准妈妈是不穿这种东西的. 不在中国生活的人不会明白,怀孕和生产在中国是多么热门的话题。 两年前,我在北京一家公司等候会见时,看到一位秘书小姐隆起的腹部上罩了一个围裙。我问她是不是觉得冷,她回答说:“不是,我...
标签: 育儿
哪些才是最好的胎教音乐 一般的准妈妈对于音乐知识的了解并不是很多,因此虽然我们看了很多关于胎教音乐选择的知识,可是到头来还是不知道该如何去选择胎教音乐,不知道什么样的胎教音乐才能更好的促进孕期的母婴健康,才能对胎儿的发育起到良好的促进作用。所以与其去讨论关于胎教音乐选择方面的知识,我们还不如直接一点,告诉各位准...
iPhone勿扰模式到底是什么   勿扰模式到底是什么?该如何使用勿扰模式?勿扰模式在很多熟悉iOS系统的网友面前应该不是新鲜面孔了。这个功能的诞生意义主要是为让用户的工作与生活更好的达到平衡而设定。然而还是有许多用户不熟悉其具体操作,该篇教程可以帮助你快速掌握其使用方法及技巧。 勿扰模式是非常棒的功能,当你在会议中总...
iPhone勿扰模式到底是什么?   勿扰模式是非常棒的功能,当你在会议中总是有人狂打给你,或是提醒事项不断的跳出来、手机震个不停,只要开启勿扰,iPhone 马上安静下来。 iOS 7 的控制中心自下方拉起后,可以直接开启「勿扰模式」,但我们今天要看更多「勿扰模式」的功能,请到「设定/设置」→「勿扰模式」。 勿扰排...
宝宝得了“瘊子”如何护理   括括三岁了,前胸和后背长了一片一片的小颗粒,不痛不痒,按压无水分,医生诊断说是“传染性软疣”(瘊子),并用镊子把疣夹掉了,但后来又有新的长出来了。那么,妈妈应该怎样护理长“瘊子”的宝宝呢?    养育误区   看到宝宝身上有...

经验教程

292

收藏

38
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部