Yehuda Katz (ph) 718.877.1325
On Tue, Oct 16, 2012 at 12:51 PM, Herby Vojčík <he...@mailbox.sk> wrote: > This did not get to the list, reposting... > > -------- Original Message -------- > From: Herby Vojčík <he...@mailbox.sk> > Subject: Fail-fast on non-existing [[Get]] > Date: Fri, 12 Oct 2012 22:42:05 +0200 > To: ECMAScript discussion <es-discuss@mozilla.org> > > Hello! > > I have just looked the video on channel9 between Lars Bak and Anders > Hejlsberg, and it gave me one idea. > > It seems people sometimes worry about (basically because of a typo) that > they [[Get]] a non-existing property but as it stands, it just returns > undefined and goes happily on. > > I see two solutions: > - add something to the freeze, seal, preventExtensions family which > would set an object to the fail-fast [[Get]] state. > - use a Proxy in the proto chain to trap the unknown [[Get]] and > throw early > Using a proxy for your own objects to throw seems reasonable, but see below for breakage to existing JS patterns. Adding it globally (via Object.protoype.__proto__) would almost certainly break other JS code on the page. Consider this very common pattern: obj.foo = obj.foo || bar; As a matter of practice, lots of JS code relies on the soft-fail behavior, for good reason, and trying to change that behavior would not likely result in happiness for consumers of the code that introduced this change. > > Do you think this needs a solution at all? If yes, which option would > you favour? > > Herby > > P.S.: In the latter case, I see the possibility of putting > ClosedFormObject (or whatever name) constructor function which would > have a proxy for a .prototype just one step below Object, and let > classes that would want to throw on default-undefined-[[Get]] just > derive from that or its ancestors. Do you think this is minimal enough > so it can be put directly into language (if the solution does not have > some flaws which are not apparent to me)? > ______________________________**_________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/**listinfo/es-discuss<https://mail.mozilla.org/listinfo/es-discuss> >
_______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss