Ugh, that formatted poorly, at least in my mail client. Here's the example again:
js> var obj = Proxy.create(myEmptyHandler, proto); js> String(obj) trying: toString trying: valueOf TypeError: can't convert obj to string js> obj + "" trying: valueOf trying: toString TypeError: can't convert obj to primitive type Dave On Oct 16, 2011, at 1:46 PM, David Herman wrote: > If you want to create a clean-slate proxy object -- for example, a dictionary > -- then you can't predefine toString or valueOf. But this means your object > will always fail at the semantic operations [[ToString]] and [[ToPrimitive]]. > For example: > >> var obj = Proxy.create(myEmptyHandler, proto); >> String(obj) > TypeError: can't convert obj to string >> obj + "" > TypeError: can't convert obj to primitive type > > If you actually instrument the proxy to watch which operations it's trying, > you'll see: > >> var obj = Proxy.create(myEmptyHandler, proto); >> String(obj) > trying: toString > trying: valueOf > TypeError: can't convert obj to string >> obj + "" > trying: valueOf > trying: toString > TypeError: can't convert obj to primitive type > > Should we not offer derived traps for toString and valueOf (which, if not > defined, default to looking up the "toString" and "valueOf" properties, > respectively, on the receiver), to allow for stratified implementation of > this reflective behavior, i.e., without polluting the object's properties? > > Dave > > PS SpiderMonkey also has the unstratified Object.prototype.toSource, which is > used for the non-standard uneval function, for printing out values at the > console. This is kind of unfortunate since it suggests a need for another > proxy trap, but this time it's not for a standard functionality. > > _______________________________________________ > es-discuss mailing list > es-discuss@mozilla.org > https://mail.mozilla.org/listinfo/es-discuss _______________________________________________ es-discuss mailing list es-discuss@mozilla.org https://mail.mozilla.org/listinfo/es-discuss