That sounds like the opposite argument you are making with regard to the hypothetical |here|:
> BTW I do not agree we can or should try to reserve 'here' or expose the > method's "home object" -- that breaks abstractions built using prototypes. > 'super' does not, because it always goes to the [[Prototype]] of the object > in which the method was defined. The prototype seems to be the best location for shared data (such as the number of instances of a class). Wouldn’t you also want to abstract from the exact location of such a property? I find that Common Lisp does this well, via "places": - Property lookup => returns a place, e.g. a pair (object, property name) - Use the place to either read the property value or to change it. Can’t comment on Proxies, though. On Jun 21, 2011, at 21:36 , Brendan Eich wrote: > On Jun 21, 2011, at 8:24 AM, Axel Rauschmayer wrote: > >> As a loose analog to the prototype-chain-traversing getPropertyDescriptor(), >> I would still like to have something that allows one to easily *change* >> properties higher up the prototype chain (e.g. to use a prototype to share >> state). > > Such mutation from a delegating object, because it affects all other objects > that delegate to the shared prototype, is usually a bug! Shared mutables are > a bitch, even ignoring threads. > > I think it would be better to require the mutation to have a direct reference > to the prototype. Yes, it could be discovered via Object.getPrototypeOf -- > assuming no proxies. > > We cannot assume no proxies, and a Proxy is responsible for delegating to > possibly hidden objects other than the |proto| passed to Proxy.create. > > Even without proxies, or assuming they behave like native objects, mutation > from one of N delegating objects is an anti-pattern. > > /be > > >> >> Maybe it would be enough to just have Object.getDefiningObject(obj, >> propName): >> http://www.mail-archive.com/es-discuss@mozilla.org/msg06652.html >> >> But I can also imagine syntactic sugar: >> obj.foo := "abc" >> desugars to >> Object.getDefiningObject(obj, "foo").foo = "abc" >> >> -- >> Dr. Axel Rauschmayer >> >> a...@rauschma.de >> twitter.com/rauschma >> >> home: rauschma.de >> blog: 2ality.com >> >> >> >> _______________________________________________ >> es-discuss mailing list >> es-discuss@mozilla.org >> https://mail.mozilla.org/listinfo/es-discuss > > -- Dr. Axel Rauschmayer a...@rauschma.de twitter.com/rauschma home: rauschma.de blog: 2ality.com _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss