【问题标题】:I want to save the state of window, without having changes made later affect the saved state我想保存窗口的状态,以后所做的更改不会影响保存的状态
【发布时间】:2011-06-25 06:45:27
【问题描述】:

我刚刚开始了一个名为 Diff.js 的项目。它有几个功能,用于检测差异。其中一个函数是detectNew(original_state, current_state);

它检测当前状态中的属性,而不是原始状态中的属性。我想要做的是检测窗口对象中的新属性,但我正在做的是:

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

但是 _window 变量会随着 window 的变化而变化。 有人知道如何防止这种行为吗?

【问题讨论】:

    标签: javascript javascript-framework


    【解决方案1】:

    你需要复制窗口状态。

    你可以像这样使用 jQuery:

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

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

    【讨论】:

    • 唯一的问题是~改变窗口的脚本~实际上是jQuery。 xD
    【解决方案2】:

    窗口里面有很多东西!

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

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

    但由于循环引用,这不起作用。我建议您将感兴趣的范围限制为窗口的某些子对象。 Window 内置的东西太多了,而且它可能一直在变化。

    【讨论】:

    • 我想过这样做,但我也希望将函数包含在 _window 变量中,并且根据我的经验,JSON 不支持函数。不过感谢您的想法。
    【解决方案3】:
    // Create a backup variable.
    var _window = {};
    
    // Put all the properties in it.
    for (prop in window) 
        _window[prop] = window[prop];
    

    我最终使用了这个小sn-p。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-10
      • 2015-10-04
      • 2015-12-19
      • 1970-01-01
      • 2022-01-26
      • 1970-01-01
      • 2023-04-02
      • 2017-08-17
      相关资源
      最近更新 更多