Javascript передача параметров объекту

Javascript передача параметров объекту

Передача параметров по значению

Строки, числа, логические значения передаются в функцию по значению. Иными словами при передаче значения в функцию, эта функция получает копию данного значения. Рассмотрим, что это значит в практическом плане:

function change(x) < x = 2 * x; console.log("x in change:", x); >var n = 10; console.log("n before change:", n); // n before change: 10 change(n); // x in change: 20 console.log("n after change:", n); // n after change: 10

Функция change получает некоторое число и увеличивает его в два раза. При вызове функции change ей передается число n. Однако после вызова функции мы видим, что число n не изменилось, хотя в самой функции произошло увеличение значения параметра. Потому что при вызове функция change получает копию значения переменной n. И любые изменения с этой копией никак не затрагивают саму переменную n.

Передача по ссылке

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

function change(user) < user.name = "Tom"; >var bob =< name: "Bob" >; console.log("before change:", bob.name); // Bob change(bob); console.log("after change:", bob.name); // Tom

В данном случае функция change получает объект и меняет его свойство name. В итоге мы увидим, что после вызова функции изменился оригинальный объект bob, который передавался в функцию.

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

function change(user)< // полная переустановка объекта user= < name:"Tom" >; > var bob =< name: "Bob" >; console.log("before change:", bob.name); // Bob change(bob); console.log("after change:", bob.name); // Bob

То же самое касается массивов:

function change(array) < array[0] = 8; >function changeFull(array) < array = [9, 8, 7]; >var numbers = [1, 2, 3]; console.log("before change:", numbers); // [1, 2, 3] change(numbers); console.log("after change:", numbers); // [8, 2, 3] changeFull(numbers); console.log("after changeFull:", numbers); // [8, 2, 3]

Источник

Читайте также:  Javascript переменные целые числа

Передача объекта в Функцию — Переменная ссылается на объект

Продолжим практическое освоение 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 , которая ссылается на объект «Собака», то функция снизит вес собаки на указанное во втором параметре число.

/* Объект «Собака» */
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 + » килограмм» );

Собака Джуси сейчас весит 12 килограмм

Для тех, кто вник в суть передачи переменных в функцию, решение этой задачи может показаться неожиданным, ведь, напомним, что при работе с переменными в функцию передается копия значения переменной; исходное значение переменной остается прежним .

С объектами дело обстоит иначе : при передаче переменной, которая ссылается на объект, в функцию: все изменения свойств объекта , которые происходят внутри функции , отражаются на исходном объекте . Смотрите сами.

Мы вызвали функцию lose_Weight с параметрами juicy и 3 .

juicy — это переменная, которая ссылается на объект «Собака»;

Внутри функции происходит обращение к свойству объекта weight — это вес собаки, из значения которого (то есть из 15) вычитается число 3 .
dog.weight = dog.weight — value

В результате изменения , которые были сделаны внутри функции , отразились на исходном объекте .

Итак, процедура передачи в функцию переменной, ссылающейся на объект, позволяет внутри функции менять свойства этого объекта.

Читайте также.

Передача переменой в функцию в JavaScript

Передача функции в функцию — Первоклассные значения

Метод write() объекта document

Объект Window и свойство window

Функция isNaN — Число или не число

Функции parseInt, parseFloat — Конвертация строк

Передача данных по ссылке и по значению – Клонирование объекта

Пример создания табов в JavaScript — Работа с проектом

Источник

Оцените статью