Yes, well I am confessing that I enjoy working with JavaScript for much the same reasons as Mr. Douglas Crockford does. I was attempting to do a little OO coding, trying to basically specify an interface with a base class and inheriting from that class for various implementations of the interface.
This blog I found was quite helpful to me but still vague in how to properly use it.
So here is some short code I made up that convinced me of the right way to do inheritance.
If would also seem that multiple inheritance could be done this way by simply cascading the instance creation functions to make a multi-generational inheritance structure.
I am hoping that Dr. Crockford will have a chance to comment on this blog and correct me if I am wrong here.
This blog I found was quite helpful to me but still vague in how to properly use it.
So here is some short code I made up that convinced me of the right way to do inheritance.
Note how we hide the definition of the objects within a clearly defined constructor function. Inheritance is controlled by the class factory so things become clear what they mean and its not easy to just throw objects together in random inheritance trees.<!DOCTYPE html> <html> <head> <title>Playing with OO javascript</title> <script type="text/javascript"> // see http://javascript.crockford.com/prototypal.html if (typeof Object.create !== 'function') { Object.create = function (o) { function F() {} F.prototype = o; return new F(); }; } // Usage:newObject = Object.create(oldObject); function createParentClassInstance() { var o = {}; o.item1 = 'Parent says: hi.'; o.item2 = 'I\'m the parent'; return o; } function createChildClassInstance() { var o = Object.create(createParentClassInstance()); o.item2 = 'I\'m the child'; o.item3 = 'Child says hi.'; return o; } function out(s) { document.body.innerHTML += s; } function PageLoad() { var parentInstance = createParentClassInstance(); var childInstance1 = createChildClassInstance(); out(parentInstance.item1 + '<br>'); out(parentInstance.item2 + '<br>'); out(parentInstance.item3 + '<br><br>'); out(childInstance1.item1 + '<br>'); out(childInstance1.item2 + '<br>'); out(childInstance1.item3 + '<br><br>'); } </script> </head> <body onload="PageLoad();"> </body> </html>
If would also seem that multiple inheritance could be done this way by simply cascading the instance creation functions to make a multi-generational inheritance structure.
I am hoping that Dr. Crockford will have a chance to comment on this blog and correct me if I am wrong here.