2009/12/9 Tom Van Cutsem <[email protected]>: > On Wed, Dec 9, 2009 at 1:02 AM, Mike Wilson <[email protected]> wrote: >> >> Looking at the Use Cases section in your proposal it seems most >> of your suggested use cases would be interesting to apply on an >> object prototype/class level when targeting many objects, to >> avoid having to recreate the catch-all for every object and also >> possibly adding dynamically generated methods in a common place >> (like in Ruby/ActiveRecord). >> Hearing that you are not certain that this is indeed an important >> use case, or maybe use case property, I wonder if I am missing >> something? I have full respect for that you have thought this >> through, so maybe there is something in the language or in other >> Harmony plans that make this less interesting? > > Ok, we should probably have made clear the distinction between our > *motivating* use cases and other possible use cases. > Our motivating use case for the proxy proposal is near-complete object > virtualization, that is: the ability to emulate as much aspects of an > object's behavior as practically possible (I'm not claiming our current > proposal achieves full virtualization, but it comes close, given the legacy > compatibility and security constraints). > > In this light, the "__doesNotUnderstand__" trap provides a strict subset of > what you can do with full object virtualization. So, while you can > definitely use the proposed proxies to build a Ruby/ActiveRecord-style > framework in Javascript (see below), this use case was not our main > motivation. A motivating example would be using proxies to virtualize an > existing Javascript API (e.g. to enforce access control to the DOM, or to > provide a legacy interface adaptor to a new API).
I.e. this allows implementing Mozilla style wrappers in user-space. With the exception that mozilla's wrappers support ===, but by combining this with a weak reference table mapping wrapped objects to wrappers, you could preserve EQ as far as a piece of code that never gets a handle to a wrapped DOM node is concerned. >> >> This sounds interesting. It would be great if you could show a >> code example? A good "demo" case could be mimicing the single >> point catch-all and dynamic .find_by_* method generation for all >> User objects in the ActiveRecord examples: >> http://api.rubyonrails.org/classes/ActiveRecord/Base.html >> (section "Dynamic attribute-based finders") > > Here's the essence of one possible solution: > > var attributeBasedFinder = Proxy.create({ > get: function(rcvr, p) { > var res = p.match(/^find_by_(.*)$/); > if (res) { > return generate_find_by_query(res[1], rcvr.name); > } > } > }); > > function makeTable(tname) { > return Object.create(attributeBasedFinder, { > name: { value: tname } > }); > }; > > Cheers, > Tom > >> >> Best regards >> Mike >> >> _______________________________________________ >> es-discuss mailing list >> [email protected] >> https://mail.mozilla.org/listinfo/es-discuss > > > _______________________________________________ > es-discuss mailing list > [email protected] > https://mail.mozilla.org/listinfo/es-discuss > > _______________________________________________ es-discuss mailing list [email protected] https://mail.mozilla.org/listinfo/es-discuss

