7.4 Operations on Iterator Objects
25.1有对Iterator的介绍
7.4.1 GetIterator ( obj [ , method ] )
这个抽象操作执行过程如下:
- 如果 method 没传, 那么:
- 使 method 为 GetMethod(obj, @@iterator).
- 使 iterator 为 Call(method, obj).
- 如果 Type(iterator) 不是 Object, 抛出TypeError异常.
- 返回 iterator.
7.4.2IteratorNext ( iterator [ , value ] )
这个抽象操作执行过程如下:
- 如果 value 没传, 那么:
- 使 result 为 Invoke(iterator, "next", « »).
- 否则,
- 使 result 为 Invoke(iterator, "next", « value »).
- 如果 Type(result) 不是 Object, 抛出TypeError异常.
- 返回 result.
7.4.3 IteratorComplete ( iterResult )
这个抽象操作执行过程如下:
- 断言:: Type(iterResult) 是 Object.
- 返回 ToBoolean(? Get(iterResult, "done")).
7.4.4 IteratorValue ( iterResult )
这个抽象操作执行过程如下:
- 断言:: Type(iterResult) 是 Object.
- 返回 ? Get(iterResult, "value").
7.4.5 IteratorStep ( iterator )
这个抽象操作探测Iterator是否到达结束,操作过程如下:
- 使 result 为 IteratorNext(iterator).
- 使 done 为 IteratorComplete(result).
- 如果 done 是 true, 返回 false.
- 返回 result.
7.4.6 IteratorClose ( iterator, completion )
这个抽象操作是用来提醒Iterator应该执行它成为完成状态时应该执行的操作:
- 断言:Type(iterator) 是 Object.
- 断言:completion 是 Completion Record.
- 使 return 为 GetMethod(iterator, "return").
- 如果 return 是 undefined, 返回 Completion(completion).
- 使 innerResult 为 Call(return, iterator, « »).
- 如果 completion.[[Type]] 是 throw, 返回 Completion(completion).
- 如果 innerResult.[[Type]] 是 throw, 返回 Completion(innerResult).
- 如果 Type(innerResult.[[Value]]) 不是 Object, 抛出TypeError异常.
- 返回 Completion(completion).
7.4.7 CreateIterResultObject ( value, done )
这个抽象操作执行过程如下:
- 断言:Type(done) 是 Boolean.
- 使 obj 为 ObjectCreate(%ObjectPrototype%).
- 执行 CreateDataProperty(obj, "value", value).
- 执行 CreateDataProperty(obj, "done", done).
- 返回 obj.
7.4.8 CreateListIterator ( list )
这个抽象操作执行过程如下:
- 使 iterator 为 ObjectCreate(%IteratorPrototype%, « [[IteratorNext]], [[IteratedList]], [[ListIteratorNextIndex]] »).
- 设置 iterator 的内部属性 [[IteratedList]] 为 list.
- 设置 iterator 的内部属性 [[ListIteratorNextIndex]] to 0.
- 使 next 为一个新的如在7.4.8.1 中定义的 ListIterator next对象
- 设置 iterator 的内部属性 [[IteratorNext]] 为 next.
- 执行 CreateMethodProperty(iterator, "next", next).
- 返回 iterator.
7.4.8.1 ListIterator next( )
这个抽象操作执行过程如下:
- 使 O 为 this value.
- 使 f 为 active function object.
- 如果 O 没有 [[IteratorNext]] 内部属性, 抛出TypeError异常.
- 使 next 为 O 的内部属性 [[IteratorNext]].
- 如果 SameValue(f, next) 是 false, 抛出TypeError异常.
- 如果 O 没有 [[IteratedList]] 内部属性, 抛出TypeError异常.
- 使 list 为 O 的内部属性 [[IteratedList]].
- 使 index 为 O 的内部属性 [[ListIteratorNextIndex]] 的值.
- 使 len 为 list 元素的个数.
- 如果 index ≥ len, 那么:
- 返回 CreateIterResultObject(undefined, true).
- 设置O的内部属性 [[ListIteratorNextIndex]] 值为 index+1.
- 返回 CreateIterResultObject(list[index], false).
注意:ListIterator next 方法如果不是应用于最开始关联的那个对象,将会抛出异常