Я хочу сохранить состояние окна, без внесения изменений, повлиявших на сохраненное состояние - PullRequest
0 голосов
/ 11 февраля 2011

Я только что начал проект, который я называю Diff.js.Он имеет несколько функций для обнаружения различий.Одной из функций является detectNew (original_state, current_state);

Обнаруживает свойства в current_state, которых нет в original_state.Что я хочу сделать, это обнаружить новые свойства в объекте окна, но я делаю следующее:

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

Но переменная _window изменяется вместе с окном.Кто-нибудь знает, как предотвратить такое поведение?

Ответы [ 3 ]

0 голосов
/ 11 февраля 2011

окно содержит много вещей!

Вам нужно сделать глубокую копию вашего объекта вместо простого назначения, потому что назначение выполняется по ссылке.Но копировать окно не просто.Я хотел быть умным и использовать встроенную поддержку JSON современных браузеров:

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

Но это не работает из-за циклических ссылок.Я бы порекомендовал вам ограничить область интереса некоторым подобъектом окна.В окне слишком много встроенных вещей, и оно, вероятно, всегда меняется.

0 голосов
/ 11 февраля 2011
// Create a backup variable.
var _window = {};

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

В итоге я использовал этот небольшой фрагмент.

0 голосов
/ 11 февраля 2011

Вам необходимо скопировать состояние окна.

Вы можете использовать jQuery как:

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

// change window

detectNew( _window, window )

Просто предложение ... Я не пробовал это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...