2011-02-11 100 views
0

我刚开始一个项目,我打电话给Diff.js.它有几个功能,用于检测差异。其中一个函数是detectNew(original_state,current_state);我想保存窗口的状态,而不必做任何更改,以后会影响保存的状态

它检测current_state中不在original_state中的属性。我想要做的是检测窗口对象中的新属性,但我正在做的是:

var _window = window; 
// ~Script that changes window~ 
detectNew(_window, window); 

但_window变量随窗口一起改变。 任何人都知道如何防止这种行为?

回答

0
// Create a backup variable. 
var _window = {}; 

// Put all the properties in it. 
for (prop in window) 
    _window[prop] = window[prop]; 

我结束了使用这个小片段。

0

您需要复制窗口状态。

您可以使用jQuery这样的:

var _window = {}; 
jQuery.extend(true, _window, window); 

// change window 

detectNew(_window, window) 

只是一个建议......我没试过。

+0

唯一的问题是,改变窗口的〜Script实际上就是jQuery。 xD – Kayla

0

窗口有很多东西在里面!

您需要做一个对象的深层副本,而不仅仅是赋值,因为赋值是通过引用。但复制窗口并不容易。我想聪明,并使用内置JSON支持现代浏览器:

var _window = JSON.parse(JSON.stringify(window)); 

但是,这并不因循环引用工作。我建议你将感兴趣的范围限制在窗口的某个子对象中。 Window只有很多内置的东西,它可能总是在变化。

+0

我想过这样做,但我也希望函数被包含在_window变量中,而根据我的经验,JSON不支持函数。谢谢你的想法。 – Kayla