// 我的需求是遍历出data中的persons数据,这个时候可以考虑迭代器 // 迭代器原理: // (1)创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。 // (2)第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。 // (3)第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。 // (4)不断调用指针对象的next方法,直到它指向数据结构的结束位置。 const data = { name: '应用', persons: [ 'UZI', 'MLXG', 'XIAOMING', 'LETME', 'XIAOHU' ], [Symbol.iterator]() { //原理1:创建一个指针对象 let index = 0; return { //对象中存在next方法 next: () => {// ()=>箭头函数保证this指向的是data //不断调用next方法,直到结束 if (index < this.persons.length) { const result = { value: this.persons[index], done: false }; index++; return result; } else { return { value: undefined, done: true } } } } } } //完成了data [Symbol.iterator]方法的定义之后重新遍历,即实现最初的需求 for (let i of data) { console.log(i);// UZI MLXG XIAOMING LETME XIAOHU }
关于 Symbol :https://www.runoob.com/w3cnote/es6-symbol.html
ES6 引入了一种新的原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名。
ES6 数据类型除了 Number 、 String 、 Boolean 、 Object、 null 和 undefined ,还新增了 Symbol 。