在ES6中,对象默认下并不是可迭代对象,表现为其没有[Symbol.iterator]属性
而for…of…循环,实际上是依次将迭代器(或任何可迭代的对象,如生成器函数)的值赋予指定变量并进行循环的语法,当对象没有默认迭代器的时候,当然不可以进行循环,而通过给对象增加一个默认迭代器,即[Symbol.iterator]属性,就可以实现,如下代码
Object.prototype[Symbol.iterator] = function *keys(){
for(let n of Object.keys(this)){ // 此处使用Object.keys获取可枚举的所有属性
yield n
}
}