Как создать сайт

Объекты: как передать значение по ссылке

Здравствуйте! Продолжаем разбираться с объектами в JavaScript  и  в этом уроке я расскажу как передавать в объект значение по ссылке.  Ведь  отличием объектов от  переменных,  как раз и является их хранение и копирование «по ссылке». Ну давайте разбираться постепенно.

передача значения по ссылке в объектах

Копирование по значению

Как правило  такие  значения как  строки, числа, булевы значения, null/undefined  если они присваиваются переменным будут копироваться целиком или это еще называется «по значению».

var mess = "Hello";
var phras = message;

В результате  у нас есть 2  независимых переменных, в которых содержится слово «Hello».

Копирование по ссылке объектов

А вот с объектами – всё не совсем так.

Дело в том, что в переменной, которой  собственно и присвоен объект, хранится не сам объект, а «ссылка» на него.
Вот как выглядит переменная, которой присвоен объект:

var student = {
  name: "Вася"
};

Так вот в переменой будет лишь ссылка на объект, но не сам объект.
И при копировании копируется ссылка, а сам объект будет оставаться в единичном экземпляре.

var student = { name: "Вася" }; // в переменной  находится ссылка

var adm = student; // будет скопирована ссылка

В результате получили 2 ссылки на один и тот же объект.
Поскольку объект всего один, то изменения через любую переменную будут  также видны и в других переменных

 var student = { name: 'Олег' }; 
var adm = student; 
adm.name = 'Андрей'; // поменяли данные через admin 
alert(student.name); // '', изменения видны в user

Для лучшего понимания приведу аналогию со шкафом. Представьте что вы сделали  еще один клюя к шкафу так вот ключи от шкафа это наши переменные, а собственно шкаф — это объект.

Клонирование объектов

А что если вам надо будет скопировать именно сам объект а не ссылку на него. Как это сделать. Давайте разбираться.

Читайте также  Объекты в функциях

Для этого надо перебрать все свойства объекта в цикле (как это сделать читайте здесь) и скопировать в переменную.

Например:

var student = {
  name: "Олег",
  age: 28
};
var clon = {}; // новый объект
// скопируем в него все свойства student
for (var key in student) {
  clon[key] = student[key];
}
// теперь clon - полностью независимая копия
clon.name = "Петя"; // поменяли данные в clon
alert( student.name ); // по-прежнему "Олег"

В данном примере  каждое свойство объекта student  будет  копироваться в clon. Если представить, что они переменные, то каждое свойство скопируется по значению  и в результате получится полная копия.

Итоги

  • Объект копируется «по ссылке». То есть, переменная хранит адрес памяти по которому находится объект или простыми словами ссылку на объект, но не сам объект.
  • Если переменную скопировать в функцию или в другую переменную, то будет скопирована ссылка на объект, а сам объект останется не тронутым.

 

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Плюсануть
Поделиться
Понравилась запись? Подпишитесь на обновления по почте:

Об авторе

admin administrator

Оставить ответ

− 1 = 1

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: