学习视频: 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
喜欢的话不妨点个小小的赞与关注,您的赞与关注将是我源源不断的前进动力。