should probably use prototype inheritance cuz JavaScript