Actually, if I remember correctly, new is explicitly required in order to have jQuery work with Caja (you can't do just String() or Number() or Object() or Function() you must include 'new' in front of all of them). We had to change some other methods to match this, previously.
--John On Wed, May 20, 2009 at 5:38 PM, Andrea Giammarchi < andrea.giammar...@gmail.com> wrote: > John, perfect except the new. > The Function itself returns an anonymous function. new in front of a > function like this: > > var o = new function(){ > return function(){}; > }; > > simply means that o will bhe the function and new will be ignored (if a > function return an instance of something, it does not matter if you use new > before or not) > > Accordingly, new Function is a common mistake, unless somebody demonstrates > that it makes logically or practically sense :-) > > quick patch, remove new, just Function(whatever)(); > > > > On Wed, May 20, 2009 at 10:29 PM, John Resig <jere...@gmail.com> wrote: > >> Ticket filed: >> http://dev.jquery.com/ticket/4680 >> >> Fix landed: >> http://dev.jquery.com/changeset/6361 >> >> --John >> >> >> On Wed, May 20, 2009 at 10:24 AM, John Resig <jere...@gmail.com> wrote: >> >>> Ok, it all sounds in order to me - someone want to file a ticket? >>> http://dev.jquery.com/newticket >>> >>> --John >>> >>> >>> >>> On Wed, May 20, 2009 at 10:04 AM, mike.helgeson <mike.helge...@gmail.com >>> > wrote: >>> >>>> >>>> The YUI compressor does not seem complain about using the Function >>>> technique. >>>> >>>> (function(){ >>>> >>>> function evaluate( data ){ >>>> return Function("return "+( data ) )(); >>>> }; >>>> >>>> })(); >>>> >>>> becomes... >>>> >>>> (function(){function A(B){return Function("return "+(B))()}})(); >>>> >>>> >>>> On May 20, 9:06 am, John Resig <jere...@gmail.com> wrote: >>>> > Has anyone been able to figure out if YUIMin still behaves as you >>>> would >>>> > expect it to? >>>> > >>>> > --John >>>> > >>>> > On Wed, May 20, 2009 at 6:48 AM, Andrea Giammarchi < >>>> > >>>> > andrea.giammar...@gmail.com> wrote: >>>> > > Ok, the reason eval is so slow is because of FireBug, it costed 17 >>>> seconds >>>> > > with FireBug enabled while FireBug seems to do not affect Function >>>> execution >>>> > > (which makes Function against better than eval). >>>> > >>>> > > In any case, Function is faster or exactly fast as eval is, even in >>>> > > Internet Explorer, at least in my tests. >>>> > >>>> > > this is a truly simple readapted test case: >>>> > >>>> > > <!DOCTYPE html> >>>> > > <script type="text/javascript"> >>>> > > portable = (function(msg, i, interval){ >>>> > > function timeout(){ >>>> > > alert(msg.join("\n")); >>>> > > msg = []; >>>> > > i = 0; >>>> > > }; >>>> > > return { >>>> > > log:function(test){ >>>> > > msg[i++] = test; >>>> > > clearTimeout(interval); >>>> > > interval = setTimeout(timeout, 100); >>>> > > } >>>> > > } >>>> > > })([], 0, 0); >>>> > > var count = 10000, o = null, i = 0, jsonString = >>>> > > >>>> '{"value":{"items":[{"x":1,"y":2,"z":3},{"x":1,"y":2,"z":3},{"x":1,"y":2,"z":3},{"x":1,"y":2,"z":3},{"x":1,"y":2,"z":3}]},"error":null}'; >>>> > > var beginTime = new Date(); >>>> > > for ( i = 0; i < count; i++ ) >>>> > > o = eval( "(" + jsonString + ")" ); >>>> > > portable.log( "eval:" + ( new Date() - beginTime ) ); >>>> > > var beginTime = new Date(); >>>> > > for ( i = 0; i < count; i++ ) >>>> > > o = new Function( "return " + jsonString )(); >>>> > > portable.log( "new Function:" + ( new Date() - beginTime ) ); >>>> > > var beginTime = new Date(); >>>> > > for ( i = 0; i < count; i++ ) >>>> > > o = Function( "return " + jsonString )(); >>>> > > portable.log( "Function:" + ( new Date() - beginTime ) ); >>>> > > var beginTime = new Date(); >>>> > > var callback = Function( "return " + jsonString ); >>>> > > for ( i = 0; i < count; i++ ) >>>> > > o = callback(); >>>> > > portable.log( "precompiled Function:" + ( new Date() - beginTime ) >>>> ); >>>> > > if(this.JSON){ >>>> > > var beginTime = new Date(); >>>> > > for ( i = 0; i < count; i++ ) >>>> > > o = JSON.parse(jsonString); >>>> > > portable.log( "native:" + ( new Date() - beginTime ) ); >>>> > > }; >>>> > > </script> >>>> > >>>> > > Let me know what you think. >>>> > >>>> > > Regards >>>> > >>>> > > On Wed, May 20, 2009 at 7:43 AM, Andrea Giammarchi < >>>> > > andrea.giammar...@gmail.com> wrote: >>>> > >>>> > >> As I said, Function does not do scope resolution except the global >>>> one so >>>> > >> in my opinion should be always preferred for JSON evaluations. >>>> Firefox does >>>> > >> not care about implicit returned value plus brackets plus scope, it >>>> simply >>>> > >> create the anonimous function doing a syntax check and returns >>>> errors only >>>> > >> at call time so if there are no errors the precompiled funcion will >>>> be like >>>> > >> a manual one, time for parsing syntax is then one against every >>>> eval call. >>>> > >> To be fair, that bench make sense declaring the function once and >>>> simply >>>> > >> calling it inside the for to always return the same object. >>>> Unfortunately >>>> > >> this is not a real world case. >>>> > >>>> > >> On May 20, 2009 7:33 AM, "Michael Geary" <m...@mg.to> wrote: >>>> > >>>> > >> Function( 'return ' + data )() is also MUCH faster in Firefox than >>>> eval. >>>> > >>>> > >> In a test case of JSON data containing 1000 names and addresses >>>> (about >>>> > >> 112KB), eval() takes a full second to execute on my machine in >>>> Firefox 3. On >>>> > >> all other browsers (including IE!) it takes hardly any time at all. >>>> > >>>> > >> The Function version takes essentially no time in Firefox. (Didn't >>>> test it >>>> > >> in other browsers.) >>>> > >>>> > >> -Mike >>>> > >>>> > >> ------------------------------ >>>> > >> *From:* jquery-dev@googlegroups.com [mailto: >>>> jquery-...@googlegroups.com] >>>> > >> *On Behalf Of *John Resig >>>> > >> *Sent:* Tuesday, May 19, 2009 4:20 PM >>>> > >> *To:* jquery-dev@googlegroups.com >>>> > >> *Subject:* [jquery-dev] Re: window['eval']() in rhino >>>> > >>>> > >> > I don't remember the original discussion/change, off-hand. If >>>> YUIMin is >>>> > >> still able to generate an ... >>>> >>>> >>> >> >> >> > > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-dev@googlegroups.com To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---