简体   繁体   English

For-of 循​​环默认迭代器函数

[英]For-of Loop Default Iterator Function

Consider this simple generator function defined on Object.prototype :考虑在Object.prototype定义的这个简单的生成器函数:

Object.prototype.defineProperty(Object.prototype, 'pairs', {
    enumerable: false,
    * value( ) {
        for (const key in this)
            yield [ key, this[key] ];
} });

Of course, it could be used like this:当然,它可以像这样使用:

const object = { goats_teleported: 42 };

for (const [ key, value ] of object.pairs());

But I wonder if there any way to assign pairs function to object prototype, so it will be automaticly fired in for-of loop without explicit call;但是我想知道是否有任何方法可以将pairs函数分配给对象原型,因此它会在for-of循环中自动触发而无需显式调用; just like this:像这样:

for (const [ key, value ] of object);

Any ideas?有任何想法吗?

   Object.prototoype[Symbol.iterator] = function* pairs() {
     //...
   };

But be aware that this could cause side effects everywhere.但请注意,这可能会在任何地方引起副作用。 This shouldn't be used in production (or at least, on your own risk ;)).这不应该在生产中使用(或者至少,你自己承担风险;))。

Put the generator on Object.prototype[Symbol.iterator] :将生成器放在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); }

in ES6 you can use Symbol.iterator to define custom iterator for prototype.在 ES6 中,您可以使用Symbol.iterator为原型定义自定义迭代器。 See here这里

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM