> Le 8 août 2016 à 11:02, Claude Pache <claude.pa...@gmail.com> a écrit : > > Here is another test case, with [[GetOwnPropertyDescriptor]]: > > ```js > var target = Object.seal({x: 2}); > var proxy = new Proxy(target, { > getOwnPropertyDescriptor(o, p) { > var d = Reflect.getOwnPropertyDescriptor(o, p) > if (d && 'writable' in d) > d.writable = false > return d > } > }); > > Object.getOwnPropertyDescriptor(proxy, 'x'); // { value: 2, writable: false, > configurable: false } > > Object.defineProperty(proxy, 'x', { value: 3 }) > > Object.getOwnPropertyDescriptor(proxy, 'x'); // { value: 3, writable: false, > configurable: false } > ``` > > IMHO, the most robust fix is the following: Both the [[DefineOwnProperty]] > and the [[GetOwnPropertyDescriptor]] contain the following check: > > * If IsCompatiblePropertyDescriptor(extensibleTarget, resultDesc, targetDesc) > is false, throw a TypeError exception. > > I think there should be also the following check (except when targetDesc is > undefined, in which case another appropriate check is used): > > * If IsCompatiblePropertyDescriptor(extensibleTarget, targetDesc, resultDesc) > is false, throw a TypeError exception. > > That would replace the weaker adhoc check about the [[Configurable]] > attribute (search for settingConfigFalse) in those algorithms. > > (Alternatively, in order to avoid double checks, define an > AreBothWaysCompatiblePropertyDescriptors(extensibleTarget, desc1, desc2) > abstract operation.) > > —Claude >
Looking closer, it seems that using IsCompatiblePropertyDescriptor is in fact an overkill, because we probably don’t want the special case of conditionally mutable [[Writable]] attribute for nonconfigurable properties. That is, I think that the following condition must hold: If either the target has a nonconfigurable property, or the proxy claims to have a nonconfigurable property, then every attribute of the property descriptor claimed by the proxy must be identical to the corresponding attribute of the property descriptor of the target. —Claude _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss