Иногда возникает необходимость отследить кто и когда меняет проперти какого-то существующего объекта в js. Как это можно сделать?

В JavaScript Harmony предложен метод Object.observe.

Пример использования:

var obj = { id: 1 };
Object.observe(obj, function (recs) {
  // ...
});
obj.id = 2;

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

Пока поддерживает этот метод только Chrome с включенными экспериментальными функциями js. Но, к счастью, есть несколько полифиллов для нее. Например, https://github.com/jdarling/Object.observe или https://github.com/Polymer/observe-js.