Установка одного объекта, равного другому объекту, с оператором присваивания в 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? Ясно, что я не хочу каждый отдельный атрибут каждый раз, когда мне нужно копировать этот объект.

Ответ 2

Всякий раз, когда мне нужно копировать один объект в другой в JS, я просто применяю его к примитиву:

var newObject = JSON.stringify(oldObject);

Затем, когда мне нужно его использовать:

var evenNewerObj = JSON.parse(newObject);

Надеюсь, это поможет кому-то.

Ответ 3

Он равен 8.

pnt2 = pnt1

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

Ответ 4

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