Давным-давно было предложено Object.observe дать нам возможность наблюдать общие свойства объекта: добавлены, удалены или изменены.

Они посчитали эту функцию революцией, даже если ограничиться одним уведомлением об изменениях верхнего уровня, потому что, наконец, мы могли реагировать на изменения изначально.

В наши дни у нас есть states и связанные с ним методы, такие как setState(changes), чтобы прагматично реагировать на эти изменения: Object.observe магии больше нет!

Что, если бы я сказал тебе ...

… Что современные браузеры и NodeJS могут использовать прокси для «автоматического» перехвата любых изменений на любой глубине для любой сериализуемой структуры данных, такой как JSON?

Встречайте Само собой разумеющееся

Имея уже 100% покрытие кода и протестированные различные варианты использования, включая эту замечательную интеграцию с hyperHTML и классами, Introspected способен перехватывать и уведомлять любые изменение, которое может произойти с любым путем, на любой глубине, в универсальном объекте или массиве.

Каждое уведомление будет отправлено мгновенно, и с помощью Introspected можно также отличить исходные данные от данных, отслеживаемых при каждом изменении.

Рассмотрим следующие исходные данные, полученные с помощью Introspected и уведомленные о каждом изменении.

Как только вы это сделаете, и вы сможете протестировать прямо на живой тестовой странице все, что показано в этом посте, вы можете изменить любые данные и увидеть, как это красиво зарегистрировано в консоли.

Результат будет примерно таким:

Что за красной бархатной занавеской

Самоанатомический объект - это бесконечный прокси, который может быть установлен в любое время в каждом свойстве на любой глубине.

Вы не стали бы проверять такое свойство, как obj.prop.b, потому что это всегда правдиво, вы бы вместо этого 'b' in obj.prop .

Вы также можетеIntrospected.pathValue(obj,['prop','b']); получить значение и / или убедиться, что общий путь не undefined.

Все прокси являются оболочкой для словарей, и об изменениях сообщается только в том случае, если установленные значения отличаются от предыдущих.

Вы можете Introspected.observe(obj, callbaclk)несколько раз получать разные уведомления, если это obj уже является Самоанализом, и это почти все, больше не о чем помнить 🎉

Каковы варианты использования?

  • общие состояния, отслеживаемые таким образом, чтобы ничего нельзя было пропустить
  • данные модели в поля формы и наоборот, где с каждым полем может быть связан путь к модели.
  • асинхронное хранилище с инкрементными обновлениями, используя тот же обратный вызов diff, который я показал ранее, мы можем обновлять, добавлять или удалять поля и значения из любых реляционных данных, кроме базы данных
  • инструменты, где изменение объекта может вызвать компиляцию, обновления пользовательского интерфейса, уведомления и т. д.

Если у вас есть другие полезные кейсы, поделитесь ими и дайте мне знать, что вы думаете об этом подходе.

Обратите внимание: версия выпуска - 0.1.7, и даже если она уже сверхстабильна и полностью покрыта, если вы думаете, что что-то должно окончательно измениться, сейчас самое время помочь мне сделать это супер-полезным для всех , Спасибо!