## 生成器
js中的for....of方法主要依赖于构造函数中的Symbol.iterator,也就是迭代器,迭代器类似于指针,
其中有一个next()函数用于遍历对象的值,然后返回一个对象。但是我们都知道js中的对象不能使用
for...of方法。我们的目的就是向Object对象中增加一个迭代器,之后的每个对象实例都可以使用
for...of方法。迭代器一定要返回next函数,而next函数要返回一个对象,也就是
{value: 要取得的属性值,done: 为true时表示迭代完成}
Object.prototype[Symbol.iterator] = function () {
var _this = this;
var index = 0;
var arrKeys = Object.keys(p);
return {
next() {
if (index < arrKeys.length) {
const result = { value: _this[arrKeys[index]], done: false };
index++;
return result;
} else {
return {
value: undefined,
done: true
}
}
}
}
}
测试
var nbaPlayer = {
a: "Curry",
b: "Durant",
c: "James",
d: "Kobe"
};
for(var value of p) {
console.log(value);
}
打印结果
|