use defineProperty so that statics can't change