jQuery is a library, not a language ... new $ where $ return a new something else is allowed by JavaScript specs ... it is not an error, syntax speaking, it is just like people using whatever.toString() rather than "" + whatever ... you are creating a drama over a truly simple and common mistake for unskilled JS developers but still, it does not harm anybody and if the application does not work is not because of new $.
I am sure you have hundreds of valid arguments about their bad practices, but tell them that their code is crap and cannot work because new $ is allowed ( by JavaScript itself, it is NOT jQuery ) is an error as well. It is not about JavaScript panorama only, there are crap developers for evey languages and actually truly skilled developers are rare but nobody cares that much ... I see horrors in famouse PHP CMS every day but these CMS are famous .... I have seen crappy logic in pieces of Zend Framework but it is suppose to be enterprise .... I cannot blame anybody using a programming language in a bad way as long as results are somehow reached ... I agree that this would have been a better world if every paid developers was truly senior but I cannot find a single argument in this thread about jQuery, sorry. On Sun, May 17, 2009 at 2:00 PM, DBJDBJ <[email protected]> wrote: > > Allow me to be very clear: > > Issue is in MOUNTAIN of legacy javascript/css/html ... Company X > decides to improve its "portal" or whatever horrid pile of sugar they > might have amassed, and then yet another team is made to do it. Which > usually consist of visual basic/delphi/sql/asp "developers" who are > all avid followers of jQuery. They simply include jQuery in these > pages , and then ... nothing works. Then they struggle for approx few > weeks and just then they declare that jQuery is "very bad" and then > they either revert back to ASP or JSP or whatever horros you can think > of. But. Minority admits they need to learn a bit more and then they > call people in to help them out. > This is where we usaly come in. And this is where we use my version of > jQuery to show them where are they making mistakes and for us to > understand what is going on. > And then "fun" starts when the legacy code has to be removed/destroyed/ > forgotten. In those moments I would like Ricardo and Andrea to stand > in front of these (by now highly annoyed) managers and developers and > tell them : > > ".. jQuery does it work as it's supposed to, it's not it's duty to > enforce > good practices ... or alert users of javascript syntax errors..." > > What is the issues here is the jQ usage patterns not jQ itself. And > this is a very big mountain to climb for a very big portion of > developers. Number of people who are beyond intermediate skills in > javascript+css, is in reality very very small ... > > -- DBJ > > > > > On May 16, 12:17 pm, Ricardo <[email protected]> wrote: > > Well, you shouldn't let your clients mess with your javascript, minify > > it before deploying. Anything that happens is their own problem - that > > is, if you're not hired to do it. > > > > jQuery does it work as it's supposed to, it's not it's duty to enforce > > good practices (wishful thinking) or alert users of javascript syntax > > errors. > > > > On May 15, 8:03 pm, DBJDBJ <[email protected]> wrote: > > > > > > > > > I have only clients no boses, who blame it on jQuery .... until they > > > are caught that is ;o) > > > I am catching them with jQ version I have "adorned" with this kind of > > > checks like the one we are discussing here. > > > You will be amazed (same as me) what are javascript/css/html newcomers > > > capable of doing. > > > One more check I am going to add is this one to stop them doing new $ > > > () ... > > > > > Thanks > > > > > --DBJ > > > > > On May 15, 10:43 am, Andrea Giammarchi <[email protected]> > > > wrote: > > > > > > Tell your head of "whatever" that a title in a contract does not > necessary > > > > mean extraordinary skills and if he would like to improve his > JavaScript > > > > knowledge he is more than welcome in this ml ( probably more as > reader ... ) > > > > anyway ... > > > > > > function init(selector, context){ > > > > if(this instanceof jQuery) > > > > throw new Error( jQuery.error_code, "Can not new $()"); > > > > return new jQuery.fn.init(selector, context); > > > > > > }; > > > > > > function jQuery(selector, context) { > > > > return jQuery.fast ? > > > > new jQuery.fn.init(selector, context) : > > > > init.call(this, selector, context) > > > > ; > > > > > > }; > > > > > > Conditional is a bit faster than an if but still it is something that > does > > > > not make sense because as I said the nature of the jQuery callback is > dual ( > > > > both function/constructor ... it does not matter which way you call > it, the > > > > result will always be an instance of jQuery, if "you" like weist time > > > > writing an alread implicit "new" everywhere, it cannot be a jQuery > issue, do > > > > you agree? ) > > > > > > On Fri, May 15, 2009 at 10:20 AM, Daniel Friesen > > > > <[email protected]>wrote: > > > > > > > ;) I still see an if statement there, heh. > > > > > > > I prefer the conditional comments + build system approach. > > > > > > > ~Daniel Friesen (Dantman, Nadir-Seen-Fire) [ > http://daniel.friesen.name] > > > > > > > DBJDBJ wrote: > > > > > > "... If a user uses new $ this user simply does not truly > understand/ > > > > > > know > > > > > > JavaScript but fortunately will not harm anybody..." > > > > > > > > No it wont, unless this user is a team leader and starts blaming > > > > > > jQuery on everything. > > > > > > And this happens much more than anyone here (it seems) realises. > > > > > > But. This is another subject. > > > > > > > > PS: > > > > > > > > jQuery.fast = false ; > > > > > > jQuery.error_code = 0xABCD ; > > > > > > > > function(selector, context) { > > > > > > if ( ! jQuery.fast) > > > > > > if(this instanceof jQuery) > > > > > > throw new Error( jQuery.error_code, > "Can > > > > > > not new $()"); > > > > > > return new jQuery.fn.init(selector, context); > > > > > > } > > > > > > > > On May 14, 2:59 pm, Andrea Giammarchi < > [email protected]> > > > > > > wrote: > > > > > > > >> to do that you need to change the contructor: > > > > > > > >> function(selector, context) { > > > > > >> if(this instanceof jQuery) > > > > > >> throw new Error("Can not new $()"); > > > > > >> return new jQuery.fn.init(selector, context); > > > > > > > >> } > > > > > > > >> this means an extra if for each jQuery call, something not that > welcome > > > > > for > > > > > >> performances reason. At the same time, jQuery itself relies in > this > > > > > >> JavaScript peculiarity, so I would not create "conflicts" > between jQuery > > > > > >> developers and users. > > > > > > > >> If a user uses new $ this user simply does not truly > understand/know > > > > > >> JavaScript but fortunately will not harm anybody. > > > > > > > >> On Thu, May 14, 2009 at 10:23 AM, DBJDBJ <[email protected]> > wrote: > > > > > > > >>> Ah, new $, is possible and therefore not barred ... Left in > there as a > > > > > >>> sort of a land-mine for the newcomers ? Or as an esoteric test > for GC > > > > > >>> developers ? Highly useless it seems to me. > > > > > > > >>> Back to reality and jQuery. $ is defined as: > > > > > > > >>> function(selector, context) { > > > > > >>> // The jQuery object is actually just the init > constructor > > > > > >>> 'enhanced' > > > > > >>> return new jQuery.fn.init(selector, context); > > > > > >>> } > > > > > > > >>> Maybe I am just searching for ECMA "harmony", but will $() > definition > > > > > >>> that throws an exception if new-ed , be usefull : > > > > > > > >>> try { > > > > > >>> new $ ; > > > > > >>> } catch ( x ) > > > > > >>> { > > > > > >>> // x. message == "Can not new $()" > > > > > >>> } > > > > > > > >>> Au-contraire : will this hurt anyone ? Is exception throwing > > > > > >>> porgramming idiom damaging for jQuery? > > > > > > > >>> --DBJ > > > > > > > >>> PS: if Python was choosen as a Netscape scripting language, > World > > > > > >>> would be a better place ... If nothing else its name is less > > > > > >>> ridiculous ... ;o) > > > > > > > >>> On May 14, 9:04 am, Andrea Giammarchi < > [email protected]> > > > > > >>> wrote: > > > > > > > >>>> it's called JavaScript :D > > > > > > > >>>> jokes a part, every function is a constructor as well so new > function > > > > > is > > > > > >>>> always valid. > > > > > > > >>>> If the function returns an object, it does not matter which > "new" is > > > > > > > >>> because > > > > > > > >>>> it will be an instance of returned object one. > > > > > > > >>>> if it is a primitive it will simply be lost: > > > > > > > >>>> var a = new function(){return 123;}; > > > > > >>>> // a is an instance of anonymous function > > > > > > > >>>> this allows us to create Python like initializations: > > > > > > > >>>> function PythonLike(){ > > > > > >>>> return this instanceof arguments.callee ? this : new > > > > > > > >>> arguments.callee; > > > > > > > >>>> }; > > > > > > > >>>> alert(PythonLike() instanceof PythonLike); > > > > > >>>> alert(new PythonLike() instanceof PythonLike); > > > > > > > >>>> true in both cases > > > > > > > >>>> jQuery returns a new jQuery.prototype.init where init method > shares > > > > > the > > > > > > > >>> same > > > > > > > >>>> prototype ... better now? :-) > > > > > > > >>>> On Wed, May 13, 2009 at 11:57 PM, DBJDBJ <[email protected]> > wrote: > > > > > > > >>>>> Why is this allowed : > > > > > > > >>>>> var jq = new $ ; > > > > > > > >>>>> Does it matter? > > > > > > > >>>>> -- DBJ- Hide quoted text - > > > > - Show quoted text - > > > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---
