JS: захват статического снимка объекта в определенный момент времени с помощью метода - PullRequest
0 голосов
/ 13 апреля 2010

У меня есть объект JS, который я использую для хранения информации DOM для удобного использования в сложном графическом интерфейсе.

Это начинается так:

var dom = {
    m:{
        old:{},

        page:{x:0,y:0},
        view:{x:0,y:0},

        update:function(){
            this.old = this;
            this.page.x = $(window).width();
            this.page.y = $(window).height();
            this.view.x = $(document).width();
            this.view.y = window.innerHeight || $(window).height();
        }

Я вызываю функцию изменения размера окна:

$(window).resize(function(){dom.m.update()});

Проблема с dom.m.old. Я бы подумал, что, вызвав его в методе dom.m.update () до , присваиваются новые значения для других свойств, в любой момент времени dom.m.old будет содержать снимок объект dom.m с момента последнего обновления - но вместо этого он всегда идентичен dom.m. Я только что получил бессмысленный метод рекурсии.

Почему это не работает? Как я могу получить статический снимок объекта, который не будет обновляться без специального уведомления?

Комментарии, объясняющие, как я вообще не хочу делать что-либо подобное, в первую очередь, очень приветствуются:)

Ответы [ 2 ]

2 голосов
/ 13 апреля 2010

this является ссылкой на объект. Вы не храните копию объекта. Вы храните ссылку на этот объект. Если вам нужна копия, вам нужно скопировать свойства вручную. Самый простой способ - использовать $.extend():

this.old = $.extend({}, this);
1 голос
/ 13 апреля 2010

OK, терминология - «глубокая» копия. Я бы подумал, что все наоборот (просто получи впечатление, а не сам объект). Так или иначе, Cletus прав, но синтаксис:

this.old = $.extend(true,{},this)

И, по-видимому, «снимок» - это «клон» в языке разработчика.

...