adaptation to use Object.defineProperty instead of use the direct prototype assignation