如何在 java 脚本中找到修改数据的代码

how to find the code in java script which is modifying the data

假设有一个 json 数据存储在一个变量中,并且多个函数正在修改 data.Is javascript 或从开发工具中以任何方式查找哪个代码修改了 data.Is数据.

var employeeDetails = {
  name: "John",
  age: 22
}

function updateEmployeeDetails1() {
  employeeDetails.age = employeeDetails.age + 1;
  console.log("In employeeDetails1()", employeeDetails)
}

function updateEmployeeDetails2() {
  employeeDetails.name = employeeDetails.name + "Papa";
  console.log("employeeDetails2()", employeeDetails);
}

function sayHello() {
  console.log("HELLO");
}

updateEmployeeDetails1();
updateEmployeeDetails2();
sayHello();

有什么方法可以检查哪个方法修改了 employeeDetails 对象,具体来说是一个属性(“假设名称”)?

简单的解决方案是在函数中设置断点并逐步执行代码以更好地了解正在发生的事情。

另一种方法是覆盖对象的 setter 和 getter 函数,并在该变量更改时动态中断代码。这样做的好处是你不需要找到变量发生变化的所有地方。

https://jsfiddle.net/8t3czxkb/2/

var employeeDetails = {
  age: 22,
  name: "John"
};

//Debug object properties

debugObject = (obj) => {
  for (const prop of Object.keys(obj)) {
    Object.defineProperty(obj, prop, {
      get: function() {
        console.log("get " + prop);
        debugger; 
        return this["_" + prop];
      },
      set: function(value) {
        this["_" + prop] = value;
        debugger;
        console.log("set " + prop);

      }
    })
  }
}

debugObject(employeeDetails);

employeeDetails.name = "John";

function updateEmployeeDetails1() {
  employeeDetails.age = employeeDetails.age + 1;
  console.log("In employeeDetails1()", employeeDetails);
}

function updateEmployeeDetails2() {
  employeeDetails.name = employeeDetails.name + "Papa";
  console.log("employeeDetails2()", employeeDetails);
}

updateEmployeeDetails1();
updateEmployeeDetails2();