-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Description
迭代器是一个对象,通过使用 next() 方法实现 Iterator protocol 的任何一个对象,该方法返回具有两个属性的对象: value,这是序列中的 next 值;和 done ,如果已经迭代到序列中的最后一个值,则它为 true 。如果 value 和 done 一起存在,则它是迭代器的返回值。
Symbol.iterator
要成为可迭代对象, 一个对象必须实现 @@iterator 方法。这意味着对象(或者它原型链上的某个对象)必须有一个键为 @@iterator 的属性,可通过常量 Symbol.iterator 访问该属性。
Symbol.iterator 为每一个对象定义了默认的迭代器。该迭代器可以被 for...of 循环使用。
内置可迭代对象有:String、Array、TypedArray、Map 和 Set
将一个类或对象实现可迭代
class IteratorUser {
public name = ''
public age = 0
public constructor(name: string, age: number) {
this.name = name
this.age = age
}
public say(greeting: string) {
console.log(`${greeting}, ${this.name}`)
}
public [Symbol.iterator]() {
let index = 0
const keys = [
...Object.getOwnPropertyNames(this),
...Object.getOwnPropertyNames(Object.getPrototypeOf(this))
]
return {
next: () => {
return {
value: keys[index],
done: index++ === keys.length
}
}
}
}
}
const user = new IteratorUser('Tom', 24)
user.say('Hi')
for (let i of user) {
console.log(i) // name, age, constructor, say
}Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels