How to implement encapsulation, inheritance and polymorphism in javascript