Вам придется обернуть все вложенные объекты классом, который сообщает вам, когда что-то меняется.Дело в том, что если вы поместите наблюдателя только в объект первого уровня, вы будете получать уведомления только о свойствах, содержащихся в этом объекте.
Например, представьте, что у вас есть этот объект:
var obj = new WrappedObject({
property1: {
property1a: "foo",
property1b: 20,
}
})
Если вы не оберните объект, содержащийся в porperty1, вы получите только событие "get" для property1
, и только это, потому что когда кто-то запускает obj.property1.property1a = "bar"
единственное взаимодействие, которое у вас будетс obj, будет, когда он запрашивает ссылку на объект, содержащийся в property1
, и модификация будет происходить в ненаблюдаемом объекте.
Лучший подход, который я могу себе представить, это итерация по всем свойствамВы оборачиваете первый объект и рекурсивно создаете объект-обертку для каждого typeOf(property) == "Object"
.
Надеюсь, мое понимание вашего вопроса было правильным.Извините если нет!Это мой первый ответ здесь: $.