К сожалению, нет, вот почему Прокси были такой большой вещью. На данный момент нет другого способа инициировать код при добавлении свойства к объекту, кроме Proxy.
Как вы говорите, вы можете использовать Object.defineProperty
или var a = { get x() {...}, set x(value) {...} }
, но не обнаруживать новые свойства.
Большинство фреймворков полагаются на грязную проверку: сравнение объектов по заданному времени. Сроки, где разница в основном.
AngularJS (Angular 1.x) предоставил вам специальные функции для асинхронных операций, таких как $timeout
и $http
, и это собственный способ прослушивания событий DOM, которые обернут ваши обратные вызовы, и выполнят проверку после вашего кода.
Angular (от Angular 2 до N) использует Zone.js для создания «бегущего контекста» для вашего кода, любой асинхронный обратный вызов перехватывается Zone.js. Это в основном то же решение, что и для AngularJS, но работает автоматически.
React делает нечто подобное, но вместо отслеживания ваших переменных он запускает рендерер и сравнивает, отличается ли сгенерированный DOM (Virtual DOM).