Brendan Eich (2014-10-05T05:37:21.000Z)
Dmitry Soshnikov wrote:
> From: es-discuss [mailto:es-discuss-bounces at mozilla.org] On Behalf Of Domenic Denicola
> - show quoted text -
>> >  Unless I'm missing something (quite possible!), I would prefer not to add new methods to Map and Set when they could be added to %IteratorPrototype%.
>
> Yeah, I'm missing something. It's the difference in code between:
>
> ```js
> var newMap = oldMap.map(([k, v]) =>  [k+ 1,  v+ 1]);
> ```
>
> versus
>
> ```js
> var newMap = new Map(oldMap.entries().map((([k, v]) =>  [k+ 1,  v+ 1]);

But entries returns an iterator, and if we define %IteratorPrototype% to 
create a new instance of the right class given its |this| parameter, in 
this case Map and not MapIterator, then no need for the new Map() wrapper.

> I think I still prefer avoiding every iterable subclass adding its own map/filter/etc. in favor of people using the compositional base primitives, but at least I see the argument now.

I point out in https://www.w3.org/Bugs/Public/show_bug.cgi?id=26973#c3 
that the lack of Map.prototype.{map,filter,...} doesn't bite when you 
use for-of, but of course will be missed when you want to call 
someMap.filter directly. Which is reasonable to do!

/be
forbes at lindesay.co.uk (2016-02-01T12:59:14.971Z)
> ```js
> var newMap = oldMap.map(([k, v]) =>  [k+ 1,  v+ 1]);
> ```
>
> versus
>
> ```js
> var newMap = new Map(oldMap.entries().map((([k, v]) =>  [k+ 1,  v+ 1]);
> ```

But entries returns an iterator, and if we define `%IteratorPrototype%` to 
create a new instance of the right class given its `|this|` parameter, in 
this case `Map` and not `MapIterator`, then no need for the `new Map()` wrapper.

> I think I still prefer avoiding every iterable subclass adding its own map/filter/etc.

I point out in https://www.w3.org/Bugs/Public/show_bug.cgi?id=26973#c3 
that the lack of `Map.prototype.{map,filter,...}` doesn't bite when you 
use for-of, but of course will be missed when you want to call 
`someMap.filter` directly. Which is reasonable to do!