我写了这个
myObj = {
x: 1,
y: 2,
z: 3,
};
myObj[Symbol.iterator] = function* () {
for (let val of Object.values(this))
yield val;
};
for(let x of myObj)
console.log(x); // 1,2,3
这行得通,但对我来说却显得多余。有没有一种方法可以更直接地表达相同的意思?基本上,我要寻找的是一个简单的表达式,该表达式表示“此对象的迭代器是其值迭代器”。我试过了
myObj[Symbol.iterator] = function () {
return Object.values(this)[Symbol.iterator]
}
这没有用。
Object.values(this)[Symbol.iterator]
是一个返回迭代器的函数。除了返回函数外,还应返回调用它的结果(迭代器):
const myObj = {
x: 1,
y: 2,
z: 3,
};
myObj[Symbol.iterator] = () => Object.values(myObj)[Symbol.iterator]();
for (const x of myObj)
console.log(x); // 1,2,3
您还可以创建一个单独的函数,该函数可用于任何对象:
const myObj = {
x: 1,
y: 2,
z: 3,
};
const iterator = function() {
return Object.values(this)[Symbol.iterator]();
};
myObj[Symbol.iterator] = iterator;
for (const x of myObj)
console.log(x); // 1,2,3
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句