网页js逆向获取函数发起程序函数

找出是哪个方法函数去修改的变量 在哪触发的

要找出是哪个方法或函数修改了data变量

在js中监听某个变量变化Object.defineProperty(dataparent., 'data', {
  set(value) {
    console.log('dataparent.data 被修改:', value);
    this._data = value; // 实际存储值
  },
  get() {
    return this._data;
  }
});

方法 1:利用 Error().stack 获取调用栈‌ 修改 setter,在触发时打印调用栈

Object.defineProperty(dataparent., 'data', {
  set(value) {
    console.log('data 被修改:', value);
    console.log('调用栈:', new Error().stack); // 打印完整调用链
    this._data = value;
  },
  get() {
    return this._data;
  }
});

‌方法 2:断点调试(Chrome DevTools)‌ 在 setter 内打调试断点:

set(value) {
  debugger; // 执行到此处会暂停
  console.log('data 被修改:', value);
  this._data = value;
}

‌方法 4:代理所有方法调用‌ 如果怀疑是某个方法间接修改了 data,可以代理 page 的所有方法

Object.keys(page).forEach(key => {
  if (typeof page[key] === 'function') {
    const originalMethod = page[key];
    page[key] = function(...args) {
      console.log(`方法 ${key} 被调用,参数:`, args);
      return originalMethod.apply(this, args);
    };
  }
});

常见触发场景‌ ‌框架生命周期‌:如 init()、render() 等自动触发的方法。 ‌事件监听‌:按钮点击、网络请求回调等异步操作。 ‌第三方库‌:某些库可能通过 extend 或 mixin 修改数据。 通过以上方法,可以精准定位到修改 page.data 的代码位置。优先推荐 ‌断点调试‌ 或 ‌调用栈分析‌,效率最高