refactor, use empty object as prototype