Good one, I surprised that this has never come up before. I don't think there
is anything intentional about the current design, it just fell out.
Such a property would have pretty much the same effect as
Object.defineProperty(obj, propname, { value: undefined})
which creates a readonly, nonenumerable, nonconfigurable property whose value
is undefined. There isn't much (if any, I need to look a litter deeper) real
behavioral difference between such a data property and the equivalent accessor
property except for what can be observed using Object.getOwnPropertyDescriptor.
I suppose we could put more conditions into [[DefineOwnProperty]] to reject
accessors where both [[Get]] and [[Put]] are undefined. Do you think this is a
significant issue? Is it an error that is likely to be made?
[[DefineOwnPropoerty]] is already fairly complicated so unless there is some
real hazard to allowing such properties I'm inclined to leave it as is.
Allen
>-----Original Message-----
>From: [email protected] [mailto:es-discuss-
>[email protected]] On Behalf Of Jeff Walden
>Sent: Monday, August 03, 2009 4:35 PM
>To: [email protected]
>Subject: Object.defineProperty with { get: undefined, set: undefined }
>
>Consider:
>
> Object.defineProperty(obj, propname, { get: undefined, set: undefined
>});
>
>Assuming obj has no property named by propname (whether it does or not
>is basically irrelevant to this question), the given expression
>apparently defines a property with this property descriptor:
>
> {
> [[Get]]: undefined,
> [[Set]]: undefined,
> [[Enumerable]]: false,
> [[Configurable]]: false
> }
>
>The effect of getting such a property is to return undefined; setting it
>either has no effect or throws, depending on the precise code construct
>being used.
>
>Anyway: what exactly is the meaning of a descriptor whose [[Get]] and
>[[Set]] fields are both |undefined|? Merely [[Set]] being |undefined|
>has a sensible meaning (readonly yet not necessarily constant property).
>Merely [[Get]] being |undefined| makes less sense -- one-way
>communication with an object via property setting, rather than by a
>method call? -- but okay, I can accept it as plausibly useful. But both
>[[Get]] and [[Set]] being undefined? I don't see the purpose or
>rationale behind it. Could someone enlighten me?
>
>Jeff
>_______________________________________________
>es-discuss mailing list
>[email protected]
>https://mail.mozilla.org/listinfo/es-discuss
_______________________________________________
es-discuss mailing list
[email protected]
https://mail.mozilla.org/listinfo/es-discuss