On Nov 12, 2012, at 1:20 PM, Brendan Eich wrote: > Tom Van Cutsem wrote: >> >> Another potential consistency issue is between [[HasOwnProperty]] >> and [[GetOwnProperty]]. That could be eliminated by combining >> them into one operation: >> >> [[GetOwnPropety]](name, descriptorNeeded) -> descriptor | boolean >> | undefined >> >> If descriptorNeeded is true it acts as the current >> [[GetOwnProperty]]. If descriptorNeeded is false it acts as the >> current [[HasOwnProperty]]. >> >> At the handler-level it makes it impossible to override >> "hasOwn"without also overriding "getOwnPropertyDescriptor" >> >> >> I understand the goals, but I'm not a big fan of fusing traps like this. It >> trades complexity on one level (inconsistencies between traps) for >> complexity on another level (if-tests in fused trap bodies to determine what >> type of value to return). > > Agreed. That kind of return value overloading has a smell.
Yes it does! But allowing separate inconsistent implementations of [[HasOwnProperty]] and [[GetOwnProperty]] enables the creation a big mess that may spell even worse. Particularly, in this case where [[HasOwnProperty]] adds nothing essential as [[HasOwnProperty]] should always be equivalent the ToBoolean of the result of [[GetOwnProperty]]. It is really just an optimization to avoid reifying a descriptor in cases where it isn't needed. From that perspective, a parameter that advises whether or a descriptor is needed does seem too smelly. In C++ this might be expressed as two overloads for GetOwnProperty: PropertyDescriptor* HasOwnProperty(name k) {...} bool HasOwnProperty(name k, bool needDescriptor) (...) Allen > > /be > _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss