Enumerator 对象
更新:2007 年 11 月
启用集合中项的枚举。
varName = new Enumerator([collection])
参数
varName
必选。枚举数分配到的变量名称。collection
可选项。任何实现 IEnumerable 接口的对象,如数组或集合。
备注
每个集合在 JScript 中自动具有可枚举性。因此,您不需要使用 Enumerator 对象来访问集合的成员。您可以使用 for...in 语句来直接访问任何成员。Enumerator 对象是为实现向后兼容性而提供的。
与数组不同,集合的成员不可以直接进行访问。您不能像对于数组一样使用索引,而只能将当前项指针移动到集合的第一个或下一个元素。
Enumerator 对象提供了访问任何集合成员的方法,它的行为方式类似于 VBScript 中的 For...Each 语句。
您可以通过定义实现 IEnumerable 的类在 JScript 中创建集合。也可以使用另一种语言(如 Visual Basic)或通过 ActiveXObject 对象来创建集合。
示例 1
以下代码使用 Enumerator 对象来输出可用驱动器的盘符及其名称(如果可用):
// Declare variables.
var n, x;
var fso : ActiveXObject = new ActiveXObject("Scripting.FileSystemObject");
// Create Enumerator on Drives.
var e : Enumerator = new Enumerator(fso.Drives);
for (;!e.atEnd();e.moveNext()) { // Loop over the drives collection.
x = e.item();
if (x.DriveType == 3) // See if network drive.
n = x.ShareName; // Get share name
else if (x.IsReady) // See if drive is ready.
n = x.VolumeName; // Get volume name.
else
n = "[Drive not ready]";
print(x.DriveLetter + " - " + n);
}
根据系统的不同,输出将类似于下面这样:
A - [Drive not ready]
C - DRV1
D - BACKUP
E - [Drive not ready]
示例 2
示例 1 中代码可以进行改写,以便在不使用 Enumerator 对象的情况下使用。在该示例中,将直接访问枚举的成员。
// Declare variables.
var n, x;
var fso : ActiveXObject = new ActiveXObject("Scripting.FileSystemObject");
// The following three lines are not needed.
// var e : Enumerator = new Enumerator(fso.Drives);
// for (;!e.atEnd();e.moveNext()) {
// x = e.item();
// Access the members of the enumeration directly.
for (x in fso.Drives) { // Loop over the drives collection.
if (x.DriveType == 3) // See if network drive.
n = x.ShareName; // Get share name
else if (x.IsReady) // See if drive is ready.
n = x.VolumeName; // Get volume name.
else
n = "[Drive not ready]";
print(x.DriveLetter + " - " + n);
}
属性
Enumerator 对象没有属性。