js-快照沙箱

学习视频: https://www.bilibili.com/video/BV1Tt4y1X7w5

日常学习,js实现简单的快照沙箱。实现两份window相互切换。

class SnapshotSandbox {
  constructor() {
    this.proxy = window; //window属性
    this.modifyPropsMap = {}; //记录在window上的修改
    this.active();
  }
  //   激活
  active() {
    this.windowSnapshot = {}; // 快照
    for (const prop in window) {
      // 将 window 的属性复刻进 windowSnapshot  并用 modifyPropsMap 还原 window
      if (window.hasOwnProperty(prop)) {
        this.windowSnapshot[prop] = window[prop];
      }
    }
    // 
    Object.keys(this.modifyPropsMap).forEach(p=>{
        window[p]=this.modifyPropsMap[p]
    })
  }
  //   还原
  inactive() {
  	// 将 window 的属性复刻进 modifyPropsMap 并用 windowSnapshot 还原 window
    for (const prop in window) {
      if (window.hasOwnProperty(prop)) {
        if (window[prop] != this.windowSnapshot[prop]) {
          this.modifyPropsMap[prop] = window[prop];
          window[prop] = this.windowSnapshot[prop];
        }
      }
    }
  }
}

let sandbox = new SnapshotSandbox();

((window) => {
    window.a=1
    window.b=2
    console.log(window.a,window.b)	//	1,2
    sandbox.inactive()				//	还原
    console.log(window.a,window.b)	//	undefined,undefined
    sandbox.active()				//	激活
    console.log(window.a,window.b)	//	1,2
})(sandbox.proxy);	//这个就是window

喜欢的话不妨点个小小的赞与关注,您的赞与关注将是我源源不断的前进动力。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值