Если вы знаете , какие свойства изменяются или к ним обращаются, но не , где , я перезаписываю эти свойства парой получатель / установщик. Когда вызывается сеттер, вызовите debugger
, или throw new Error()
, или console.trace()
и проверьте трассировку стека:
const obj = { foo: 'foo' };
Object.defineProperty(obj, 'foo', {
get() {
console.log('getting foo');
console.trace();
},
set(newVal) {
console.log('setting foo');
console.trace();
}
});
const gottenFoo = obj.foo;
obj.foo = 'bar';
Если вы можете управлять созданием объекта, свойства которого доступны / изменены, другой вариант - создать прокси-сервер, который позволит вам перехватить получение / наборы всех свойств объекта :
const baseObj = { foo: 'foo' };
const obj = new Proxy(baseObj, {
get(_, prop) {
console.log('getting prop:', prop);
console.trace();
return baseObj[prop];
},
set(_, prop, newVal) {
console.log('setting prop:', prop, 'with', newVal);
console.trace();
return baseObj[prop] = newVal;
}
});
const gottenFoo = obj.foo;
obj.foo = 'bar';
(Чтобы увидеть результаты console.trace
, посмотрите в консоли браузера, а не в консоли фрагмента)