x is a y => inheritance
x has a y => composition
Consider,
A rectangle is a quadrilateral object. Okay, what is a quadrilateral object? Is this what I am concerned with or do I only care about the height and width? Maybe...
A rectangle has a height
A rectangle has a width
A rectangle has a set of quadrilateral properties
Don't get me wrong, sometimes the 'is a' relationship is the true relationship. I just find many people have a very difficult time building 'proper OO' because they are taught to stuff everything into some hierarchy that either doesn't exist or is too rigid to be useful. Think of a "tree is a plant". What defines a plant? What defines a tree? What if you had to consider a fake christmas tree? That is obviously not a plant, but it has many of the same characteristics of a tree. Should it then inherit from a tree? What if your plant can grow? Now you have a christmas tree that can grow.
Anyone trying to learn JS should have a look to more recent articles.
Examples:
- http://bonsaiden.github.com/JavaScript-Garden - Good insight
- https://developer.mozilla.org/en-US/docs/JavaScript - Good place to start learning, and for experienced developers a good place to contribute to
- https://duckduckgo.com/?q=javascript+inheritance+performance - Search for performance issues
PS: recently I found an article (probably here on HN) describing how v8 treats prototypes, and how to not break the performance boost given by v8 assumptions. Can someone remember which one was?
http://www.youtube.com/watch?v=hWhMKalEicY
EDIT - Your comment inspired me to do some additional Googling -- here's another (text-based) description that's a little clearer: https://developers.google.com/v8/design#prop_access