On Nov 8, 2011, at 12:12 PM, Luke Smith wrote:

>> Sure. People make "classes" by defining function C(){} and decorating 
>> C.prototype.method1 = function(...){...}, etc. A for-in loop on (new C) will 
>> see all the methods, unlike the case with built-in constructors. That is an 
>> unwanted abstraction break: we should support abstracting over user-defined 
>> and built-in functions.
> I believe people decorate a class prototype directly because they always 
> have, and because defineProperties wasn't available for them to declare 
> prototype methods as not enumerable, not because they explicitly want class 
> proto methods to be enumerable.

Yup, that's a fact. However it contradicts Felipe's belief that only 
Object.prototype might-be-enumerable properties need to be excluded, which was 
my point.


> Can you elaborate on "we should support abstracting over user-defined and 
> built-in functions"?

Abstract over means I can for-in an instance of either a built-in or (such a) 
user-defined constructor and not see methods. I can self-host or wrap Date 
without methods showing up.

Yes, ES5 supports Object.defineProperty etc. so I can make the 
WrappedDate.prototype methods non-enumerable, if I can target ES5. But the 
general point stands: enumeration up the prototype chain either is a bug, or 
you want no enumerable prototype properties (except perhaps those added by one 
privileged library), or you want a more elaborate protocol such as Felipe's 
gave/giver one.


> Copying loses the benefit of shared defaults via prototype.  I would rather 
> see a method to flatten an object before enumeration than lose the 
> flexibility of shared state.

That might be handy but Felilpe's gave/giver protocol still seems necessary in 
general (if you can't assume no one has decorated intermediate prototypes with 
enumerable properties that should not be considered).

The flattening idea reminds me of traits (http://traitsjs.org/), since you 
might want different conflict-handling policies in case of shadowing. The 
default could shadow.

/be
_______________________________________________
es-discuss mailing list
es-discuss@mozilla.org
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to