// 对象部署迭代器,遍历对象的属性和属性值
let object = {
num: 0,
str: '',
boolean: true,
unf: undefined,
nul: null,
obj: {
name: '我是一个对象',
id: 1,
},
arr: [0, 1, 2],
func: function () {
console.log('我是一个函数')
},
date: new Date(0),
reg: new RegExp('/我是一个正则/ig'),
err: new Error('我是一个错误'),
[Symbol()]: 'symbol',
// 对象的迭代器
[Symbol.iterator]() {
let _this = this
let index = 0
let arr = Reflect.ownKeys(this)
return {
next() {
if (index < arr.length) {
return { value: { key: arr[index], value: _this[arr[index++]] }, done: false }
}
return { value: undefined, done: true }
}
}
}
}
// for...of 遍历
// for (let k of object) {
// console.log(k)
// }
// 手动调用
let iterator = object[Symbol.iterator]()
let rt = iterator.next()
while (!rt.done) {
console.log(rt)
rt = iterator.next()
}
// 原型对象部署迭代器
Object.prototype[Symbol.iterator] = function () {
let _this = this
let index = 0
let arr = Reflect.ownKeys(this)
return {
next() {
if (index < arr.length) {
// 返回属性名和属性值
// return { value: { key: arr[index], value: _this[arr[index++]] }, done: false }
// 返回属性名
return { value: arr[index++], done: false }
}
return { value: undefined, done: true }
}
}
}
let obj = {
id: 1,
name: 'tom',
age: 20,
gender: '男'
}
for (let item of obj) {
console.log(obj[item])
}
对象部署迭代器方法
最新推荐文章于 2024-07-08 16:22:29 发布