use Object.defineProperty instead of deprecated __defineGetter__