Поделиться через


Объект Enumerator

Обеспечивает перечисление элементов коллекции.

varName = new Enumerator([collection])

Аргументы

  • varName
    Обязательный. Имя переменной, которой присвоен перечислитель.

  • collection
    Необязательный. Объект, реализующий интерфейс IEnumerable, такой как массив или коллекция.

Заметки

Каждая коллекция является автоматически перечисляемой в JScript. Следовательно, для доступа к членам коллекции не обязательно использовать объект Enumerator. Доступ к любому члену можно непосредственно получить при помощи оператора for...in. Объект Enumerator предоставляется для обеспечения обратной совместимости.

Коллекции отличаются от массивов тем, что к членам коллекции нельзя получить доступ напрямую. Вместо использования индексов (как было бы в случае с массивами) можно только переместить текущий указатель элемента на первый или следующий элемент коллекции.

Объект Enumerator, дающий возможность доступа к любому члену коллекции, по своему поведению похож на оператор For...Each в VBScript.

Для создания коллекции в JScript можно определить класс, реализующий IEnumerable. Кроме того, коллекции можно создавать при помощи другого языка (такого как 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 не имеет свойств.

Методы

Методы объекта Enumerator

Требования

Версия 3

См. также

Ссылки

Оператор new

Оператор for...in