Далее на странице...
Продолжим практическое освоение Javascript. Поговорим о передаче объектов в функции.
Если Вы не еще работали с объектами, то смотрите предыдущую практическую задачу, где также есть ссылки на теорию.
Что нужно знать...
1. Читайте теорию об Объектах (перейти к ней можно по выше приведенной ссылке).
2. Полезно будет разобраться с материалом о передаче переменных в функцию.
Передача объектов в функцию - Немного теории
Для начала напомним о том, что при передаче переменной в функцию, в параметр функции копируется значение переменной, но не сама переменная (она не меняет своего исходного значения, и функция работает с копией).
Следующий момент, который следует понимать: в переменной, которая указывает на объект, хранится ссылка на него, но не сам объект.
Следовательно, если передать объект функции, то ей передается не сам объект, а ссылка на него.
Если обратиться к материалу о передаче переменных в функцию, согласно которому в функцию передается копия значения переменной. То выходит, что при передаче объекта функции - в ее параметр передается не ссылка на объект, а копия ссылки на объект.
Переменная - это ссылка на объект, она на него указывает.
В функцию передается копия ссылки на объект.
Для тех, кто запутался - это нужно прочесть и прокрутить в голове несколько раз.
Пример передачи объекта в функцию
1. В качестве примера рассмотрим объект, который содержит свойства, отражающие какие-либо качества и параметры собаки.
/* Объект «Собака» */
var juicy = {
name: "Джуси", /* имя собаки */
weight: 15, /* её вес в кг. */
breed: "Смесь", /* порода */
loves: "Прогулка" /* любит гулять */
}
- переменная juicy является ссылкой на объект, описывающий характеристики собаки;
2. Напишем функцию для снижения веса собаки.
function lose_Weight(dog,value)
{
dog.weight = dog.weight - value;
}
Функция lose_Weight работает со свойством weight (вес) объекта «Собака» и содержит два параметра dog и value:
- в параметр dog следует передать переменную juicy (см. выше), как ссылку на объект;
- в параметр value заносится произвольное число.
Итак, если в параметр dog функции lose_Weight передать переменную juicy, которая ссылается на объект «Собака», то функция снизит вес собаки на указанное во втором параметре число.
<script type="text/javascript">
/* Объект «Собака» */
var juicy = {
name: "Джуси",
weight: 15,
breed: "Смесь",
loves: "Прогулка"
}
/* Функция снижения веса */
function lose_Weight(dog,value)
{
dog.weight = dog.weight - value;
}
/* Вызываем функцию */
lose_Weight(juicy,3);
document.write("Собака " + juicy.name + " сейчас весит " + juicy.weight + " килограмм");
</script>
Результат - Передача объекта в Функцию
Собака Джуси сейчас весит 12 килограмм
Для тех, кто вник в суть передачи переменных в функцию, решение этой задачи может показаться неожиданным, ведь, напомним, что при работе с переменными в функцию передается копия значения переменной; исходное значение переменной остается прежним.
С объектами дело обстоит иначе: при передаче переменной, которая ссылается на объект, в функцию: все изменения свойств объекта, которые происходят внутри функции, отражаются на исходном объекте. Смотрите сами...
Мы вызвали функцию lose_Weight с параметрами juicy и 3.
- juicy - это переменная, которая ссылается на объект «Собака»;
Внутри функции происходит обращение к свойству объекта weight - это вес собаки, из значения которого (то есть из 15) вычитается число 3.
dog.weight = dog.weight - valueВ результате изменения, которые были сделаны внутри функции, отразились на исходном объекте.
Ведь далее, при выводе на экран свойства weight объекта, мы видим, что собака стала весить 12 кг.
Итак, процедура передачи в функцию переменной, ссылающейся на объект, позволяет внутри функции менять свойства этого объекта.
Добавил(а): Андрей
Дата: 2019-07-15
Почему объект переданный в функцию не изменился после ее отработки? <pre> "use strict" let list = { value: 1, next: { value: 2, next: { value: 3, next: { value: 4, next: null } } } }; function objectKiller(obj) { obj = null; } objectKiller(list); console.log(list); </pre>