Javascript's prototypes and classes may help bring sanity to this, but Clojure (and therefore ClojureScript) offers a slightly different approach with protocols. Instead of dealing with a hierarchy, you deal with characteristics. I'll give a quick example to illustrate the differences.