ToPropertyDescriptor, [[HasProperty]], & [[HasOwnProperty]]

Allen Wirfs-Brock allen at wirfs-brock.com
Thu May 8 15:37:00 PDT 2014


On May 8, 2014, at 1:25 PM, John-David Dalton wrote:

> ES6 additions like Object.assign use [[OwnPropertyKeys]] for getting the keys of `source` objects. This helps avoid the method gotchas faced by developers previously with things like `Object.prototype.writable = true` and `Object.defineProperty(o, 'foo', { value: 'bar' })`.
> 
> See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty#Description (bottom of section)
> 
> "Bear in mind that these options are not necessarily own properties so, if inherited, will be considered too. In order to ensure these defaults are preserved you might freeze the Object.prototype upfront, specify all options explicitly, or point to null as __proto__ property."
> 
> It's the reason I pre-populate my descriptor attributes with false even though false is the default. See https://github.com/lodash/lodash/blob/2.4.1/dist/lodash.js#L112-L117
> 
> With methods like Object.assign using [[OwnPropertyKeys]] does it make sense to make things like ToPropertyDescriptor use [[HasOwnProperty]] too. I think it would be a win for consistency and dev use.
> 
> Thoughts?

some prior discussions on this topic (or related):
  http://esdiscuss.org/topic/nuking-misleading-properties-in-object-getownpropertydescriptor 
 http://www.esdiscuss.org/topic/object-prototype-get-bye-bye-object-defineproperty 
 http://esdiscuss.org/topic/property-descriptors-as-es6-maps 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.mozilla.org/pipermail/es-discuss/attachments/20140508/47b2724f/attachment-0001.html>


More information about the es-discuss mailing list