That’s because Object.defineProperty() is the only way to watch for changes without asking the user to explicitly define getters and setters themselves. This means Vue and Mongoose can be notified of changes as they happen, rather than diffing after the fact, which is what Angular and React do.
Unfortunately, Object.defineProperty() was introduced in ES5
and is impossible to polyfill in pre-ES5 browsers like Internet Explorer 8. So while Object.defineProperty() provides reactivity without requiring explicit notification and diffing, it won’t work for legacy React projects targeting older browsers.