JavaScript中的Object到底是什么呢?

Hi离线请留言

Hi离线请留言

2016-02-19 16:16

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

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

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

 js的Object到底是什么?

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

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

 这说明Object的原型是Function?

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

 但是问题又来了:

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

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

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

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

 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

 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实例,任何用户创建的类

展开更多 50%)
分享

猜你喜欢

JavaScript中的Object到底是什么呢?

Web开发
JavaScript中的Object到底是什么呢?

伦敦金到底是什么呢

伦敦金 黄金 股票交易
伦敦金到底是什么呢

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

胎教的重点到底是什么呢

胎教 胎儿发育
胎教的重点到底是什么呢

胎教的重点到底是什么呢?

胎教 生活小常识
胎教的重点到底是什么呢?

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

女儿红到底是什么酒呢

生活常识 养生 健康
女儿红到底是什么酒呢

新生儿黄疸到底是什么呢?

电脑网络
新生儿黄疸到底是什么呢?

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

js基础:JavaScript小技巧之如何用滑鼠控制Web页面

js基础:JavaScript小技巧之如何用滑鼠控制Web页面

Win7系统技巧:ISO文件轻松刻录成光盘

Win7系统技巧:ISO文件轻松刻录成光盘
下拉加载更多内容 ↓