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