prototype inheritance
add some notes and comments