Do you know inheritance in JavaScript? Do you truly understand
how it works? Are you aware that JavaScript uses a prototypal
inheritance scheme that is often disfavored or disliked? Have you used
a script on the web to adapt this scheme to classical inheritance?
In these past few days, I've been writing a jQuery slider plugin
with various transition effects. To make the code succinct, I decided
to use a base Transition object that other objects, which define a
specific type of transition, inherit from. This led me to the question
of JavaScript inheritance.
Inheritance in JavaScript has been a controversial subject. Should a
standard be set to use classical inheritance or should the base
prototypal system be favored? Both paths have their own advantages and
disadvantages. The readings listed below will hopefully give you enough
information to choose which method you want to use.
This reading isn't really about inheritance, but it's an
important primer on object-oriented programming in JavaScript which
will help give you a deeper understand of what is to come.
John Resig, the creator of the jQuery JavaScript library, presents
his own take on inheritance. Using his utility, it's possible to change
JavaScript into more of a classical inheritance scheme.
Steffen Rusitschka explains the advantages and disadvantages of
prototype-based and closure-based (more classical) inheritance. He also
presents his own derivative of Resig's script.
4. Classical Inheritance in JavaScript
This reading, by Douglas Crockford, a well-known JavaScript
developer, is yet another way to achieve the classical inheritance
scheme in JavaScript. In addition to presenting his extension,
Crockford also explains the added functionality that JavaScript can
provide.
In this reading, Crockford analyzes his old classical inheritance
and realizes the benefits of sticking with the prototypal structure.
This last article expresses the flip side of the controversy,
explaining why there is no need for a classical inheritance scheme.
Hopefully, these links have shed light on the debate between
prototypal inheritance and classical inheritance. Although I used
Resig's script in my slider plugin, I recently came across Crockford's
prototypal inheritance article (#5) and am now rethinking my ways for
future projects.
So, what's your take on JavaScript inheritance? Leave a comment below. I would be glad to hear more arguments for either side!
|