分享
 
 
 

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

王朝html/css/js·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

在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.objCollection、 this.count和this.error。从清单C所摘录的代码中,我们可以看出构造函数中,属性的定义大概是个什么样子。

清单C

:this.objcollection = new Object; // Associative array

this.count = 0; // Total numbers of items

this.error = false; // Error indicator

除了包括这三个属性外,我们的这个集合对象还拥有六个方法:this.add、 this.exists、 this.item、this.removeAll、 this.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中使用集合了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有