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 19:22

почему в первом варианте вот это "d.c.e = 77;" не тронуло исходное t? а во втором варинте, та же конструкция без return затронула t

ivan_antonov 14.07.2015 19:32

я так понимаю, return возвращает копию чтоли, а не ссылку на локальную переменную?

kostyanet 14.07.2015 21:18

Именно так. Самая мякотка что потребуется метод для модификации этой приватной проперти, ибо наружное изменение никакого влияния на внутренности не окажет.

jackdempsey2015 14.07.2015 21:32

Цитата:

Сообщение от ivan_antonov
в этом варианте исходное t


тебе уже пояснили, ты создаешь своей ф-ей 2 разных объекта, никакого исходного (общего для них обоих) t не существует, для каждого оно локально. return тут вообще не при чем, что ты ему скажешь то он вернет.

jackdempsey2015 14.07.2015 21:34

Цитата:

Сообщение от ivan_antonov
я так понимаю, return возвращает копию чтоли, а не ссылку на локальную переменную?

твой ретурн возвращает не копию и не ссылку, он возвращает новый объект. выражение {...} означает: создать новый объект(экземпляр Object) с (опционально) такими-то полями

kostyanet 14.07.2015 22:54

Цитата:

Сообщение от jackdempsey2015
он возвращает новый объект

А почему наружные изменения этого "возвернутого" объекта не проникают внутрь функции?

Я просто подумал что ТС привел пример с двумя объектами в порядке преобразования реальной задачи к абстрактной для форума, чтоб никто как не догадался что он там задумал. Поскольку задавать вопрос об ингрессе двух отдельных никак не связанных объектов это нонсенс.

jackdempsey2015 14.07.2015 23:01

Цитата:

Сообщение от kostyanet
А почему наружные изменения этого "возвернутого" объекта не проникают внутрь функции?

в каком смысле? ЯННП

kostyanet 14.07.2015 23:30

Ну в каком смысле - если снаружи в этот объект записать число, то внутри в этом объекте такого числа не будет.

Разумеется внутри делается объект по имени и он возвращается. Разницы тут никакой в том самом смысле.

jackdempsey2015 14.07.2015 23:32

kostyanet,
Короче, я завтра собираюсь бухать, если не забуду, я после поллитра гляну твое сообщение.

Erolast 15.07.2015 13:11

Цитата:

в этом варианте исходное t не тронуто, а в нижнем модифицирует
Тронуто, просто и на "d" и на "b" приходится своя собственная копия "t".

Цитата:

я так понимаю, return возвращает копию чтоли, а не ссылку на локальную переменную?
Не совсем.
Не существует никаких локальных переменных. Каждый вызов функции Test создает новую область видимости, в которой создаются абсолютно новые переменные, в которые записываются ссылки на абсолютно новые объекты.

Цитата:

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

Цитата:

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

Цитата:

Сообщение от foo
твой ретурн возвращает не копию и не ссылку, он возвращает новый объект.



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