i would recommend studying jquery.collections by ariel flesler.

http://flesler.blogspot.com/2008/01/jquerycollection.html

i recommend this for several reasons:

1) it's a plugin - understanding plugins is part of the core architectural
pattern.

2) it mimicks jquery's core architecture - a collection is a jquery-ish
object. so you will understand why the jquery object is both a static object
with it's own methods, and how those are reused on the jquery instance,
which an array-like object with its own scope of
functions like the jquery

3) it may teach you how to use namespace (or named closure)

jquery uses this anonymous function pattern heavily.  so do good plugins.

<pre>
jQuery.noConflict();
//anonymous function executed at load time
(function($){
    //$ is jQuery
})(jQuery);//semi colon should be included
//$ is not jQuery
</pre>

you can create the same pattern with a plugin that uses an additional
namesapce to prevent pollution on the jquery namespace:

<pre>
jQuery.noConflict();
//anonymous function executed at load time
(function($, _){
    //$ is jQuery
    //_ is MyNamespace
})(jQuery, MyNamespace);//semi colon should be included
//$ is not jQuery
</pre>

On Tue, May 5, 2009 at 11:40 PM, Matt Kruse <m...@thekrusefamily.com> wrote:

>
> On May 5, 5:36 pm, kiusau <kiu...@mac.com> wrote:
> > It helps enormously, as well as everything that came before it.
>
> Glad it helped. Anyone can feel free to paraphrase what I wrote and
> wiki it if you wish ;)
>
> > What
> > alert($) returns, however, is the following:
> > function (selector, context) {
> >     return new (jQuery.fn.init)(selector, context);
> > }
>
> In some browsers.
>
> > I also
> > understand that methods and properties are pretty much treated the
> > same by the object in which they are contained.
>
> Yes, methods are always object properties.
>
> > What I do not
> > understand is why jQuery.fn.init is not written as jQuery.fn.init()
> > where init() is a method of the jQuery.fn prototype object.
>
> First, I do notice that FF alerts what you have written, yet IE does
> not. Doesn't matter how they are represented internally, though,
> because they are the same thing. In the actual source, the code is:
>
> function( selector, context ) {
>  // The jQuery object is actually just the init constructor
> 'enhanced'
>   return new jQuery.fn.init( selector, context );
> }
>
> Since
>  jQuery.fn.init === (jQuery.fn.init)
> then either representation means the same thing.
>
> Now, as for why "init" is a property of the jQuery.fn (aka
> jQuery.prototype) object and then its prototype set to jQuery.fn
> itself, I don't know. Seems like an odd coding decision to me, but
> perhaps there is some reasoning behind it? I would be curious to know.
> Separating out the init() method to just a stand-alone constructor
> function called jQuery() works fine and would seem cleaner.
>
> Any other questions? :)
>
> Matt Kruse
>



-- 
Christopher Thatcher

Reply via email to