热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

JavaScript对象问题,请介绍一下数组对象是什么,对象到底是做什么用的

JavaScript对象问题,请介绍一下数组对象是什么,对象到底是做什么用的对象就是类的实例化。要理解对象是做什么用的,应该首先理解类这个概念。举个不恰当的例子---你可以把程序语

Javascript 对象问题,请介绍一下数组对象是什么,对象到底是做什么用的

对象就是类的实例化。要理解对象是做什么用的,应该首先理解类这个概念。

举个不恰当的例子---你可以把程序语言理解为一个大的图书馆,你要去管理图书馆,就要为图书分类以便于查阅,当你要找一本书,可能首先查你编写的图书的分类,从中找到你需要的书,当你把这本书拿到手上的时候,也就是说你手上的书是某个图书分类的一个实例----也就是一个对象。

面向对象编程的好处是可以自己去编写类,然后可以应用于多个对象,也就是达到简化代码结构、方便模块化的代码编写、简化复杂的逻辑等等功能。flash的actionscript和Javascript有很多相似的地方,actionscript在基于类的面向对象编程方面,比Javascript要强大--所谓actionscript一切皆对象,对于理解对象、类等概念,可能比Javascript要稍容易一些。 有时间看看actionscript教程,可以作为一种参考。

Javascript对象和数组的区别

对象是对某个物体的形象描述,而数组则是对一群物体的抽象描述。

Javascript 里的类数组对象

很早以前我就知道可以把arguments转化为数组:[].slice.call(arguments),因为arguments是个类数组对象,所以才可以这么用。但是我一直不清楚什么叫做类数组对象(array-likeobjects)今天看EffectiveJavascript就有一节是专门讲这个的,感觉真是太拽了。

先看我写的一些示例代码:代码如下:a="hello"[].map.call(a,(e)->e.toUpperCase())#=>['H','E','L','L','O'][].reduceRight.call(a,(acc,e)->acc+e)#=>'olleh'b={1:"a",2:"b",4:"c",length:6}[].reduce.call(b,(acc,e)->acc+e)#=>'abc'前面那几个是操作字符串的,嗯,字符串也可以看成类数组对象。

但是后面那个b对象居然也是类数组对象。看书上的解释:代码如下:Sowhatexactlymakesanobject“array-like”?Thebasiccontractofanarrayobjectamountstotwosimplerules.Ithasanintegerlengthpropertyintherange0...2^32–1.Thelengthpropertyisgreaterthanthelargestindexoftheobject.Anindexisanintegerintherange0...2^32–2whosestringrepresentationisthekeyofapropertyoftheobject.居然只有这两条简单的规则。所以为什么arguments,字符串,和上面那个b对象可以看作类数组对象呢?它们都有一个合法的length属性(0到2**32-1之间的正整数)。length属性的值大于它们的最大索引(index)。

再举个例子:代码如下:b={1:"a",2:"b",4:"c",length:3}[].reduce.call(b,(acc,e)->acc+e)#=>'ab'嗯,就不对了,成了'ab'了,因为违反了规则2:length属性是3,最大索引值是4要比length属性大了。所以表现的不正常了。太强大了,好像只是定义了一个接口,只要符合这个接口,就可以利用数组的所有方法。

其实不是可以利用所有方法,Array.prototype.concat是不能用的,因为它是把两个数组连接起来,你不是数组肯定是没法用它的。还有一个小问题是,字符串创建以后是不可变的(immutable),所以你怎么折腾它都是不可变的。但是这本书根本就没有解释为什么是符合这两个条件就可以看成类数组对象,另外这本书的作者是那个什么ECMAScript委员会的成员,所以基本还是可信的。

至于为什么符合这两个条件就可以看成是类数组对象,我也不知道,谷歌搜了半天也没看到什么合理的解释。以上所述就是本文的全部内容了,希望大家能够喜欢。


推荐阅读
author-avatar
罂粟花很美也需要阳光
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有