On Wed, Aug 21, 2013 at 10:07 AM, Andreas Rossberg <[email protected]> wrote: > On 21 August 2013 15:41, Erik Arvidsson <[email protected]> wrote: >> One way to think of it is that the with is acting on a view of the >> object that does not have the blacklisted properties. This can be >> implemented using proxies. I'll leave that as an exercise. > > I see. > >>> * How would it interact with mutation? >> >> Another hole we didn't cover. Here is my proposal: >> >> The @@unscopable is only accessed once, when the object environment >> record is created. > > Hm, that would seem rather inconsistent with the way adding/removing > properties can dynamically change the domain of a 'with'. Consider: > > function safeenrich(o) { > o.a = 1 > o[@@unscopable] = o[@@unscopable] || [] > o[@@unscopable].push('a') > } > > let o = {} > let a = 0 > with (o) { > a // 0 > safeenrich(o) > a // 1 > }
I don't think it is worth covering these kind of new scenarios. We are patching a broken feature here. Still, it is easy to allow that if we really wanted to. We can make ObjectEnvironment [[HasBinding]] do object.[[Get]](@@unscopeable) every time then. -- erik _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

