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
[email protected]
https://mail.mozilla.org/listinfo/es-discuss