Changes:
 1) Define replaced with more meaningful and useful constructor and prototype
 2) Added this.$super method  (implementation can be changed in future.)