Wow! A generous contribution indeed! Thanks a lot! I'd feel guilty if I dint
read up on it now.. :)
Feels like a whole new world. Especially since using Prototype is actually
directly extending the DOM element. Feels like there's a LOT of power in
good HTML+CSS+JS that can be exploited to do a lot more functions a lot
faster than by using server side scripting.
Thanks again Crowder! My appreciation seems really small in comparison to
your contribution but i really DO mean it :)

On Sun, May 17, 2009 at 4:31 PM, T.J. Crowder <t...@crowdersoftware.com>wrote:

>
> Hi,
>
> > Thanks a lot for those :). Are there any other concepts you would suggest
> > for a guy with mostly a Ruby and C background? Things i might find
> differnet
> > from the kind of coding im used to.
>
> No worries.  Just very quickly off-the-cuff (and you'll find some
> posts about this on niftysnippets), in addition to the things we've
> already pointed out:
>
> 1. Tobie already pointed out the horror of implicit globals.
>
> 2. Binding and the "this" keyword.
>
> 3. Closures.
>
> Some further items for the C programmer (I don't know anything about
> Ruby):
>
> 4. Understand the scope chain.  (Closely related to closures, but good
> to know separately as well.)
>
> 5. {} blocks _don't_ introduce new scope; only functions do that.
>
> 6. Regardless of where you put a var statement, all vars exist
> function-wide.  For this reason, I strongly recommend putting all vars
> at the beginning of the function (like you used to have to with C,
> back in the day), to avoid misunderstandings.
>
> 7. Most of the places you're used to using NULL, use undefined.  You
> can use null, but it's more common to use undefined.  When testing,
> use "if (thingy)" where you're used to writing "if (thingy != NULL)"
> in C, and similarly "if (!thingy)" for "if (thingy == NULL)".
>
> 8. The OR (||) operator doesn't return true or false; it returns the
> left-hand value (unchanged) if that value can be coerced "true" (e.g.,
> it's "truthy"), or the right-hand value if the left-hand value can't
> be coerced "true" (it's "falsey").  This gets a huge amount of use in
> JavaScript code, usually for supplying default values for something
> that hasn't been defined.  Take this sort() function:
>
>    function sort(comparator) {
>        comparator = comparator || this.defaultComparator;
>        // ...
>    }
>
> In C, that first line wouldn't make any sense because the result would
> be -1 (TRUE) or 0 (FALSE); in JavaScript, the result is 'comparator'
> if 'comparator' is truthy, or 'this.defaultComparator' if 'comparator'
> is falsey.
>
> Be careful about going too far with that, though.  For instance, if
> you have an optional numeric argument and zero is a valid value for
> the caller to pass in and 42 is the default, you can't use
>
>   arg = arg || 42;
>
> ...to default it, because you'll use 42 instead of 0 if the caller
> passes in 0 (zero is falsey).  Similarly, an empty string is falsey.
>
> 9. Properties are really cool, and you can get at them in many ways.
> The following all retrieve the value of the 'bar' property of the
> 'foo' object and store it in 'x':
>
> A) x = foo.bar;
> B) x = foo['bar'];
> C) s = 'bar'; x = foo[s];
>
> That last one is convenient for when you don't know the name of the
> property in advance.
>
> 10. There are no methods.  There are functions, and you can store
> references to functions as properties of objects, and there is a
> convenient syntax for calling those functions with "this" set as a
> reference to the object during the course of the call, but there are
> no methods.  "this" is effectively a special function argument,
> nothing more.
>
> 11. "for..in" does not loop through the index values of an array, so
> don't use it for that.  It loops through the names of the properties
> on an object (which is very handy), including the names of properties
> that refer to functions.
>
> 12. The ECMA spec allows for properties that can't be enumerated
> (e.g., don't show up in "for..in"), but you can't mark your own
> properties that way.  For instance, "for..in" on an array won't show
> you the "length" property even though arrays have a length property.
> (It also won't show you the "pop" property, even though arrays have a
> "pop" property -- which references a function.  But it will show you
> Prototype's additions to arrays, because we can't mark them not to be
> included.  This is why for..in on arrays *seems* to loop through the
> array's contents -- until you start extending arrays the way Prototype
> does, and then suddenly you're getting function names.)
>
> 12. There is a difference between not having a property and having a
> property whose value is undefined.  Referencing a property that
> doesn't exist gives you undefined (not an error), though, so the
> difference can be subtle.  The "in" keyword tests whether an object
> has a property.  "delete" deletes a property entirely.
>
> foo = {};            // Create an empty object
> foo.bar = 42;        // Give it a 'bar' property
> alert(foo.bar);      // Alerts "42"
> alert('bar' in foo); // Alerts "true"
> foo.bar = undefined; // Set 'bar' to undefined
> alert(foo.bar);      // Alerts "undefined"
> alert('bar' in foo); // Alerts "true"
> delete foo.bar;      // Completely remove 'bar' property
> alert(foo.bar);      // Alerts "undefined"
> alert('bar' in foo); // Alerts "false"
>
> Note that if we created foo in a way that it had a prototype with a
> 'bar' property, the second-to-last alert would be controlled by the
> prototype's value for 'bar' and the last alert would be
> "true" (because "in" looks in prototypes, too).  foo.hasOwnProperty
> ('bar') checks to see if foo has its *own* 'bar' property (as opposed
> to one inherited from its prototype).
>
> 13. Prototypical inheritance is incredibly cool and powerful, but
> don't think about it too much until you have time to think about it a
> lot.
>
> 14. Prototype's extensions to Function are really, really cool and
> well worth reading up on.
>
> HTH,
> --
> T.J. Crowder
> tj / crowder software / com
> Independent Software Engineer, consulting services available
>
> On May 17, 10:42 am, Vinay Seshadri <yourstruly.vi...@gmail.com>
> wrote:
> > Hi Crowder,
> >
> > I actually did spend a couple of hours on the API a few months back when
> I
> > had to write this JS code im talking about. I must admit though, that I
> > conveniently concentrated only on those methods that I felt I required to
> > accomplish what I had to. What I really need is to understand the basic
> > rules and concepts used by and in JS.
> >
> > >Binding and the "this" keyword [2], and closures[3]
> >
> > Thanks a lot for those :). Are there any other concepts you would suggest
> > for a guy with mostly a Ruby and C background? Things i might find
> differnet
> > from the kind of coding im used to.
> >
> > On Sun, May 17, 2009 at 2:59 PM, T.J. Crowder <t...@crowdersoftware.com
> >wrote:
> >
> >
> >
> >
> >
> > > Hi,
> >
> > > > Thanks a lot Tobie! :) Ill check those out. Learning JS in detail is
> > > > definitely a must do for me, AFTER this project :D.
> >
> > > FWIW, I suspect you'll save time even on this project if you take an
> > > hour to read through the Prototype API[1] from beginning to end,
> > > especially now that you've got your feet wet.  You may not have time
> > > right now to read through Flanagan's or Crockford's books, but an hour
> > > spent with the API will almost certainly pay for itself right away.
> >
> > > [1]http://prototypejs.org/api
> >
> > > Separately, can I also suggest you read up on two fundamental concepts
> > > that may well trip you up otherwise:  Binding and the "this" keyword
> > > [2], and closures[3].  I've linked some resources about that
> > > (disclaimer: niftysnippets is my blog, not that I post to it much).
> >
> > > [2]
> > >http://proto-scripty.wikidot.com/prototype:tip-using-an-instance-meth.
> ..
> > > (also the articles linked at the bottom of [2])
> > > [3]
> > >http://blog.niftysnippets.org/2008/02/closures-are-not-complicated.html
> >
> > > HTH,
> > > --
> > > T.J. Crowder
> > > tj / crowder software / com
> > > Independent Software Engineer, consulting services available
> >
> > > On May 17, 10:04 am, Vinay Seshadri <yourstruly.vi...@gmail.com>
> > > wrote:
> > > > Thanks a lot Tobie! :) Ill check those out. Learning JS in detail is
> > > > definitely a must do for me, AFTER this project :D.
> >
> > > > On Sun, May 17, 2009 at 12:02 PM, Tobie Langel <
> tobie.lan...@gmail.com
> > > >wrote:
> >
> > > > > JavaScript has got this weird flaw, that if you forget to declare a
> > > > > variable using the "var" keyword, the variable is declared in the
> > > > > global scope instead of the current scope.
> >
> > > > > For example:
> >
> > > > > function foo() {
> > > > >  bar = 1;
> > > > >  var baz = 2;
> > > > > }
> >
> > > > > foo();
> > > > > console.log(bar);
> > > > > // -> 1
> > > > > console.log(baz);
> > > > > // -> ReferenceError: baz is not defined
> >
> > > > > As a rule of thumb: Never declare a variable WITHOUT using the
> "var"
> > > > > keyword. If you want to declare a global variable from inside a
> > > > > function (which should be a sign you're doing something wrong), set
> it
> > > > > as a property of the window object like so:
> >
> > > > > function foo() {
> > > > >  window.bar = 1;
> > > > > }
> >
> > > > > foo();
> > > > > console.log(bar);
> > > > > // -> 1
> >
> > > > > You should really get yourself a couple of books on JavaScript. I'd
> > > > > strongly suggest getting:
> >
> > > > > - JavaScript: The Definitive Guide, Fifth Edition by David
> Flanagan,
> > > > > and
> > > > > - JavaScript: The Good Parts by Douglas Crockford
> >
> > > > > There's also a number of good books on Prototype out there:
> >
> > > > > -
> > >http://prototypejs.org/2008/8/11/practical-prototype-and-scriptaculous,
> > > > > and
> > > > > -
> > > > >
> http://prototypejs.org/2007/5/7/prototype-and-script-aculo-us-the-bun.
> > > ..
> >
> > > > > Have fun!
> >
> > > > > Tobie
> >
> > > > --
> > > > In Sport We Trust !!!
> >
> > --
> > In Sport We Trust !!!
> >
>


-- 
In Sport We Trust !!!

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Prototype & script.aculo.us" group.
To post to this group, send email to prototype-scriptaculous@googlegroups.com
To unsubscribe from this group, send email to 
prototype-scriptaculous+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/prototype-scriptaculous?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to