On Apr 20, 2015, at 12:42 PM, Caitlin Potter wrote:

> Oh — he’s right, ValidateAndApplyPropertyDescriptor won’t throw in the 
> example case, because the old descriptor is configurable. That’s kind of 
> weird.

It is kind of weird, but that was what TC39 decided on back when ES5 was being 
developed.  The logic was that if a property is configurable then it is 
possible to change all of its attributes  by performing a [[DefineOwnProperty]] 
with a complete property description.   Because of that possibility, all 
changes made via a partial property descriptor are also accepted.  In other 
words:

var o = Object.create(null, {x:{value: 0, writable: false, enumerable: true, 
configurable:true}});
Object.defineProperty(o,' x', {value:2});
console.log(o.x); //2

The define property above is allowed because it could have been replaced with 
the sequence :
Object.defineProperty(o,'x', {writable: true});
Object.defineProperty(o,'x', {value: 2, writable: false});

or even by:
delete o.x;
Object.defineProperty(o,'x', {value: 2, writable: false, enumerable: true, 
configurable: true};)

hence, we might as well accept the single line version.

In retrospect, perhaps not such a good idea. 

Allen



_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss

Reply via email to