Установка одного объекта равняется другому объекту с оператором присваивания в JavaScript

Я прихожу к JavaScript происхождения C. В JavaScript, когда я использую оператор присваивания для присвоения одного объекта другому, он копирует значения от одного до другого, или они оба теперь указывают на те же данные?. Или оператор присваивания делает что-нибудь в этом случае?

function point_type()
 {
 this.x = 0;
 this.y = 0;
 }

var pnt1 = new point_type();
var pnt2 = new point_type();

pnt1.x = 4;
pnt1.y = 5;

pnt2 = pnt1;

pnt1.x = 8;
pnt2.y = 9;

В примере выше, pnt2.x теперь равняется 8, или он все еще равняется 4, или он все еще равняется 0?

Да, я понимаю, что могу протестировать это сам, и я буду делать это, в то время как я ожидаю сообщества для предложения ответа. Однако я надеюсь, что ответ на мой вопрос сделает один шаг, мимо просто отвечающий на этот пример, и мог бы пролить некоторый свет на то, как JavaScript возражает работе и некоторым лучшим практикам.

Развейте вопрос:
Ответ, кажется, что ссылка копируется. pnt2 и pnt1 теперь указывают на те же данные. Действительно ли возможно настроить мой объект так, чтобы значения были скопированы? Как это обычно выполняется в JavaScript? Очевидно я не хочу устанавливать каждый атрибут индивидуально каждый раз, когда я должен скопировать этот объект.

12
задан Hank Gay 22 December 2009 в 20:34
поделиться

3 ответа

В JavaScript примитивные типы копируются по значению, а ссылочные - по ссылке. Более подробная информация здесь: http://docstore.mik.ua/orelly/web/jscript/ch09_03.html

14
ответ дан 2 December 2019 в 04:43
поделиться

Ровно 8.

pnt2 = pnt1

Это утверждение указывает на объект pnt2 в объект pnt1, поэтому любая модификация, которую вы сделаете с pnt1, появится в pnt2.

.
2
ответ дан 2 December 2019 в 04:43
поделиться

Учитывая объект, который Вы показали в своем примере, он устанавливает ссылку на этот объект. Если бы это был примитивный тип (номер, дата), то он бы скопировал объект.

.
1
ответ дан 2 December 2019 в 04:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: