refactor with Object.defineProperties
now Object.$clone can will throw an Error message for cyclic object