One cool thing, as Andy showed in his code, is that every property or method can be enumerated either by index or key name.
Also, if you ever need to be able to resolve what method you're in, I wouldn't recommend using anonymous functions - use something with a meaningful name instead that you can parse and make sense of.
Let's take an example Faisal encountered recently.
if( some condition )
var foo = 'Hello World\n';
if( some other condition )
// Is foo available here?
alert( foo );
Of course, it is, but that's somewhat counter-intuitive, right?
Another thing I find quite interesting is that a function is actually just an object, and it too has methods. And a method on an object is just a pointer to the object. When you use the object.method() syntax, you're basically taking the method function reference and calling the apply method, passing in object to act as the scope. You can do this yourself, btw, taking a function and passing in the “this“. Cool, huh?
Actually, the whole “function.apply“ stuff can be a bit unsettling at times, but it too is pretty powerful.