super.prop assignment can silently overwrite non-writable properties

Jason Orendorff jason.orendorff at
Mon Apr 20 19:39:19 UTC 2015

On Mon, Apr 20, 2015 at 12:44 PM, Allen Wirfs-Brock
<allen at> wrote:
>> In the spec, 9.1.9 step 4.d.i. is where `super.prop = 2` ends up, with
>> O=X.prototype.
> 4.d.1 doesn't set the property, it just comes up with the property descriptor to use, if the `Receiver` does not already have a corresponding own property.
> 5.c+5.e checks if the corresponding own property actually exists on the `Receiver`.
>  If it already exits then it does a [[DefineOwnProperty]] that only specifies the `value` attribute. This should respect the current `writable` attribute of the property and hence reject the attempt to change the value.

I agree with all of this, except I don't see where the attempt is
rejected. Since the property is configurable, I think
[[DefineOwnProperty]] succeeds.

The property is still non-writable afterwards. Only the value changes.

So this isn't breaking the object invariants: the property in question
is configurable, so it's OK (I guess) to change the value. It's just
surprising for assignment syntax to succeed in doing it.


More information about the es-discuss mailing list