use defineProperty