The alternative is to treat enumerability the way ES6 treats holes: pretend it 
doesn’t exist:

* Use `Reflect.ownKeys`, `Object.getOwnPropertyNames`, 
`Object.getOwnPropertySymbols` instead of `Object.keys`.
* Don’t use the `for-in` loop (an easy one…)
* Change `Object.assign` so that it considers all properties, not just 
enumerable ones.
* The properties of class prototypes remain non-enumerable.
* I’m unsure about new built-in instance prototypes. For consistency’s sake, 
one may want to make them non-enumerable. But how would they be different from 
a library?

Quoting Sebastian Markbåge: 
https://twitter.com/sebmarkbage/status/547156703104753664

> "enumerable" is just one of an infinite number of categories you might want 
> to filter on. It's a hack and should die.

Would this approach have any disadvantages?


> On 24 Dec 2014, at 19:02, Kevin Smith <[email protected]> wrote:
> 
> ```js
> class List extends Array {
>    itsGoingToBeEnumerable() {
>      return 'but does it have to and would you expect to?';
>    }
> }
> ```
> 
> That's a good point.
> 
> As far as I can tell, the downside risk associated with making class methods 
> non-enumerable centers around mixins:
> 
> - Legacy mixin utilities will tend to fail when given ES6 classes.
> - We have no built-in function for doing proper mixins yet, and 
> `Object.assign` won't work at all.
> 
> I looked through my ES6 code and found a place where I was using 
> `Object.assign` as an simplistic mixin function.  It might be a pain to have 
> to import a userland utility for such cases.

-- 
Dr. Axel Rauschmayer
[email protected]
rauschma.de



_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to