For-of 循环默认迭代器函数
For-of Loop Default Iterator Function
考虑在 Object.prototype
:
上定义的这个简单的生成器函数
Object.prototype.defineProperty(Object.prototype, 'pairs', {
enumerable: false,
* value( ) {
for (const key in this)
yield [ key, this[key] ];
} });
当然可以这样用:
const object = { goats_teleported: 42 };
for (const [ key, value ] of object.pairs());
但我想知道是否有任何方法可以将 pairs
函数分配给对象原型,因此它会在 for-of
循环中自动触发而无需显式调用;就像这样:
for (const [ key, value ] of object);
有什么想法吗?
Object.prototoype[Symbol.iterator] = function* pairs() {
//...
};
但请注意,这可能会在任何地方引起副作用。这不应该在生产中使用(或者至少,风险由您自己承担;))。
将发电机置于 Object.prototype[Symbol.iterator]
:
Object.prototype[Symbol.iterator] = function* pairs() {
for (const key in this) yield [ key, this[key] ];
};
const object = { goats_teleported: 42, foo: 'fooval' };
for (const [ k, v ] of object) {
console.log(k, v);
}
在 ES6 中,您可以使用 Symbol.iterator
为原型定义自定义迭代器。
参见 here
考虑在 Object.prototype
:
Object.prototype.defineProperty(Object.prototype, 'pairs', {
enumerable: false,
* value( ) {
for (const key in this)
yield [ key, this[key] ];
} });
当然可以这样用:
const object = { goats_teleported: 42 };
for (const [ key, value ] of object.pairs());
但我想知道是否有任何方法可以将 pairs
函数分配给对象原型,因此它会在 for-of
循环中自动触发而无需显式调用;就像这样:
for (const [ key, value ] of object);
有什么想法吗?
Object.prototoype[Symbol.iterator] = function* pairs() {
//...
};
但请注意,这可能会在任何地方引起副作用。这不应该在生产中使用(或者至少,风险由您自己承担;))。
将发电机置于 Object.prototype[Symbol.iterator]
:
Object.prototype[Symbol.iterator] = function* pairs() {
for (const key in this) yield [ key, this[key] ];
};
const object = { goats_teleported: 42, foo: 'fooval' };
for (const [ k, v ] of object) {
console.log(k, v);
}
在 ES6 中,您可以使用 Symbol.iterator
为原型定义自定义迭代器。
参见 here