use Object.defineProperty instead of __defineSetter__ and __defineGetter__ since deprecated