use defineProperties to define properties