views:

210

answers:

3

For example, when you use jQuery('someDiv');, it's a function, but you can also use jQuery.ajax(...);.

How is it possible?

+22  A: 

In JavaScript, functions themselves are objects.

var x = function () {};
x.foo = "bar";

console.log(x.foo); // bar

EDIT:

To add onto this:

var x = function () {
    return 'foo';
};
x.bar = function () {
    return 'baz';
};

So now:

console.log(x()); // foo
console.log(x.bar()); // baz
Matt
Mother of god, I didn't know that o_O
M28
Functions are first class citizens in JavaScript.
James Westgate
Everything is everything man. JavaScript rules. :)
ahsteele
This is an excellent example of one of the beauties of JavaScript. It has its downsides, too (!), but certainly beauties as well.
Sune Rasmussen
A: 

I believe the .ajax example is utilizing the jQuery plug-in architecture. I think the AJAX capabilities of jQuery are just one of the many plug-ins you could use.

The '$' that use see is also just a alias for calling the jQuery.

One last observation jQuery is defined as (from the jquery-1.4.2.js):

var jQuery = function( selector, context ) {
        // The jQuery object is actually just the init constructor 'enhanced'
        return new jQuery.fn.init( selector, context );
    },

and Ajax looks like:

jQuery.extend({
...some other goodness...
ajax: function( origSettings ) 
...more goodness...
});
Steven Dorfmeister
+2  A: 

Here's a Wikipedia article that explains it quite well:

http://en.wikipedia.org/wiki/First-class_function

Andy West