Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   копия объекта из функции (https://javascript.ru/forum/misc/56996-kopiya-obekta-iz-funkcii.html)

ivan_antonov 14.07.2015 15:39

копия объекта из функции
 
function Test() {
        var t = { e: 3 };

        return { c: t };
    }

    var a = Test();
    var b = Test();

    a.c = undefined;
    alert(b.c.e)


Объясните, пожалуйста, почему "a.c" не влияет на "b.c"? Ведь и там и там свойство "с" это ссылка на один и тот же объект?

ivan_antonov 14.07.2015 15:44

почему "a.c = undefined;" не изменяет объект для b? ведь он просто ссылается на "t", который изменяет "a.c = undefined;"

Safort 14.07.2015 15:52

Цитата:

Сообщение от ivan_antonov (Сообщение 379547)
Объясните, пожалуйста, почему "a.c" не влияет на "b.c"? Ведь и там и там свойство "с" это ссылка на один и тот же объект?

Нет. Ты каждый раз создаёшь новый объект.

рони 14.07.2015 15:54

ivan_antonov,
каждый раз Test() создаёт новый обьект

Deff 14.07.2015 15:55

ivan_antonov,
с у Вас переменная(свойство) window
a.c и b.с - не имеют никакого отношения к с , тут с свойство конкретных объектов a или b

jackdempsey2015 14.07.2015 16:35

Цитата:

Сообщение от Deff
с у Вас переменная(свойство) window

с чего бы это?

Deff 14.07.2015 16:38

jackdempsey2015,
Он переименовал
Было так: c = undefined;

ivan_antonov 14.07.2015 19:02

Тогда почему же такая конструкция модифицирует исходный объект?
var t = { e: 3 };

        var d = t;
        d = { c: t };

        d.c.e = 5;


а когда "{ c: t }" возвращаю через return - уже не модифицирует

Erolast 14.07.2015 19:13

Цитата:

а когда "{ c: t }" возвращаю через return - уже не модифицирует
Что не модифицирует? Объект, на который также ссылается переменная t? Модифицирует.

ivan_antonov 14.07.2015 19:20

function Test() {
        var t = { e: 3 };

        return { c: t };
    }

    var d = Test();
    var b = Test();

    d.c.e = 77;
    alert(b.c.e);

в этом варианте исходное t не тронуто, а в нижнем модифицирует
var t = { e: 3 };
        var d = t;
        d = { c: t };
        d.c.e = 5;


Часовой пояс GMT +3, время: 06:41.