descriptors and not only own properties gotcha

Allen Wirfs-Brock allen at
Wed Dec 17 12:37:15 PST 2014

On Dec 17, 2014, at 10:30 AM, Andrea Giammarchi wrote:

> Actually simplifying as proposal: does everyone agree that if a descriptor.[[Value]] is own property no further checks on inherited [[Get]] and [[Set]], or generally speaking Accessor Property related checks, should be made ?
> This would already fix the `Object.prototype.get` or `.set` case since I believe nobody ever used an inherited `value` property on purpose for descriptors ... or is it?
> It will keep `enumerable` and `writable` still potentially problematic but at least the following code would never fail:
> ```js
> Object.prototype.get = function () {};
> Object.defineProperty(
>   Object.prototype,
>   'toString',
>   Object.getOwnPropertyDescriptor(
>     Object.prototype,
>     'toString'
>   )
> );
> ```
> Thanks again for any sort of outcome (or clarification on when and if this will ever be fixed)

I'm not sure what you are actually asking.  All specified internal uses of property descriptor objets should pas through ToPropertyDescriptor ( ) which will throw if there is any conflict between get/set and own value/writable properties, regardless of whether they are own or inherited.  (If you know of any uses of such descriptor object in the ES6 spec that don't do this validation, please file a bug).

If you want to enforce the same semantics on you ES-level uses of descriptor objects you need to write a ES level implementation of the checks performed by ToPropertyDescriptor.

I can see various ways we might improve the specified processing of property descriptor objects but those would generally be breaking changes and we would have to consider the possible impact of such changes before proceeding with them.  

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <>

More information about the es-discuss mailing list