Я прихожу к 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? Очевидно я не хочу устанавливать каждый атрибут индивидуально каждый раз, когда я должен скопировать этот объект.
В JavaScript примитивные типы копируются по значению, а ссылочные - по ссылке. Более подробная информация здесь: http://docstore.mik.ua/orelly/web/jscript/ch09_03.html
Ровно 8.
pnt2 = pnt1
Это утверждение указывает на объект pnt2 в объект pnt1, поэтому любая модификация, которую вы сделаете с pnt1, появится в pnt2.
.Учитывая объект, который Вы показали в своем примере, он устанавливает ссылку на этот объект. Если бы это был примитивный тип (номер, дата), то он бы скопировал объект.
.