domenic at domenicdenicola.com (2013-08-25T01:00:58.943Z)
On Wed, Aug 21, 2013 at 10:07 AM, Andreas Rossberg <rossberg at google.com> wrote: > Hm, that would seem rather inconsistent with the way adding/removing > properties can dynamically change the domain of a 'with'. Consider: 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.
On Wed, Aug 21, 2013 at 10:07 AM, Andreas Rossberg <rossberg at google.com> wrote: > On 21 August 2013 15:41, Erik Arvidsson <erik.arvidsson at gmail.com> 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