Script

本类阅读TOP10

·一个简单的javascript菜单
·网站流量统计代码
·可编辑的 HTML JavaScript 表格控件 DataGrid II
·JavaScript通用库(一)
·在网页中控制wmplayer播放器
·层遇到select框时
·TYPEING TEST ON LINE 在线打字测试 Free Software Javascript (aiiiq)
·javascript表单之间的数据传递!
·让网页自动穿上外套
·搜索gb2312汉字在网上的频率

分类导航
VC语言Delphi
VB语言ASP
PerlJava
Script数据库
其他语言游戏开发
文件格式网站制作
软件工程.NET开发
在JavaScript中建立自己的集合对象

作者:未知 来源:月光软件站 加入时间:2005-2-28 月光软件站

在JavaScript中建立自己的集合对象

集合对象——在Perl中称之为联合数组——提供了一种用来在存储器中保存和提取数据项的方法;该方法基于一种提供“关键字——数值(value)”对的数据结构上。你可以根据数据项的关键字进行插入和提取操作,每个数据项的关键字都是独有的、互不重复的。“关键字——数值”对使得集合在处理查找工作时是特别有用。另外,关键字的单值性提供标记关键字或者说检查关键字是否唯一的能力。

集合并不是一个新的概念,除了Perl之外,许多语言都支持它,如VBScript和Visual Basic。但是如果你想在JavaScript中使用集合对象,你就没那么走运了。JavaScript的5.0以及5.0之前的版本都不支持集合对象——除非你自己建立它们。我将在VBScript用集合对象来建立一个等效的模型,然后用JavaScript实现它。

看看用VBScript实现的模型

当用server-side VBScript编写代码时,我通常用集合对象来处理例行任务,如管理一个小的数据库。举例来说,假定有两个数据库表,一个用来存放某公司销售的零件现货清单,另一个用于存放生产地址,如图A所示。

Figure A


假设你必须建立一个基于Web的报表(report),其中包括零件数量、说明以及生产商地址。你可能会编写类似于下面的SQL语句。
SELECT p.part_nbr,p.description,f.name FROM tblPart p,tblFactory f WHERE p.factory_nbr = f.factory_nbr ORDER BY  part_nbr ASC

是不是看起来很简单?但是假定由于某些原因,你所需要的零件信息已经存在于一个ADO记录集(recordset)。例如,你需要用零件表的信息来生成代理报表(commission report),你该怎么办呢?无论怎样,你都可以用代码清单A中的SELECT语句,或者循环查找零件记录集并对每个零件记录使用SELECT语句来获取生产商的名字。这两种方法都是可行的,不过,访问存储设备可是脚本所能实现的工作中最耗时的一种。在遇到这种情况的时候,我一般用SELECT语句获得厂商名和厂商代号的,如

SELECT factory_nbr,name FROM tblFactory

用JavaScript实现自己的集合

现在你应该了解本模型如何在VBScript中工作的,现在让我们看看JavaScript是怎么实现的。正如我早先所提到的,集合对象按关键字存储数据项。在本例中,关键字为厂商代号,厂商名字为数据项。

为了易用起见,我从VBScript中选择了字典对象来作为模型,它实现了表A所示的方法。

表A

方法/属性

例子

说明

add

object.add(关键字,数据项)

在集合中添加一个“关键字——数据项”对。

count

object.count

返回集合中数据项的数目。

exists

object.exists(关键字)

如果关键字存在,返回“真”,否则返回“假”。

Item

object.item(关键字, 数据项)
object.item(关键字)

把一个数据项和一个关键字对应上。
返回关键字对应的数据项。

removeAll

object.removeAll()

删除集合中所有的“关键字——数据项”对。

remove

object.remove(关键字)

删除本“关键字——数据项”对。

keys

object.keys()

返回一个包含所有关键字的数组。

为了在JavaScript中创建集合,你需要使用构造函数。在JavaScript的5.0以及更早的版本中,构造函数的书写和使用方式与Visual Basic(或者其它支持对象的语言)的类的构造函数相同。集合例化的方式考虑了构造函数的用途。构造函数的方法和属性的定义把JavaScript构造函数从JavaScript普通函数中区分开来。

在写构造函数时,你可以用关键字this来访问对象的属性和方法。构造函数的任务就是初始化对象、属性(property)以及方法。我们的集合对象来有三个属性:this.objCollectionthis.countthis.error。从清单C所摘录的代码中,我们可以看出构造函数中,属性的定义大概是个什么样子。

清单C

:this.objcollection = new Object;  //     Associative array
 this.count = 0;                          //     Total numbers of items
 this.error = false;               //     Error indicator

除了包括这三个属性外,我们的这个集合对象还拥有六个方法:this.addthis.existsthis.itemthis.removeAllthis.remove以及this.keys。这些方法的定义与属性的定义方法相似,区别在于:方法的目的在于揭示函数。所以在add方法中,你需要清单D所示的代码。

清单D:

this.add = colAdd;                //     Add method

       void function colAdd(strKey,strItem) {
              /*     Function:            colAdd
                     Creation Date:       August 16, 2002
                     Programmer:          Edmond Woychowsky
                     Purpose:             The purpose of this function is to add an item to the collection object.
Update Date:  Programmer:          Description:
              */

              this.error = false;        //     Default successful

              if(typeof(this.objcollection[strKey]) == 'undefined') {
                     ++this.count;

                     this.objcollection[strKey] = strItem;
              } else
                     this.error = true;   //     Error
       }

类似与add方法,其它方法也需要它们自己的定义和函数。一旦完成这些方法的定义和函数,我们可以试一试我们的集合对象。为了简明起见,我将跳过其它函数方法的定义过程而简单的介绍JavaScript的新建集合对象的方法。第一个任务就是建立一个本对象的实例:
var colFactory = new collection(); //       建立一个实例

一旦建立了集合对象的实例,添加数据项就是一件简单的事情了。回到前面的报表例子,填写集合的任务可以用清单E中的几行代码轻松搞定。

清单E:

while(!rstFty.EOF) {

      colFactory.add(rstFty.Field('factory_nbr').Value,rstFty.Field('name').Value);
       rstFty.MoveNext
 }

你可以只用一行代码就可以获得厂商名字:
strFactoryName = colFactory.item(strFactoryNumber);

总结

通过用VBScript来建模的优势,你可以建立自己的集合对象以弥补JavaScrpt不支持集合对象的缺点。只需以少量代码为代价,你就可以在JavaScript中使用集合了。




相关文章

相关软件




月光软件程序下载编程文档电脑教程网站设计网址导航网络文学游戏天地幽默笑话生活休闲写作范文安妮宝贝
电脑技术编程开发网络专区谈天说地情感世界游戏元素分类游戏热门游戏体育运动手机专区业余爱好影视沙龙
音乐天地数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区地方风情各行各业

月光软件站·版权所有