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

О чем это мы? В программировании существует два способа передачи параметров функции: по ссылке и по значению. Когда параметр передается по значению, то функция только использует это значение, значение фактической переменной изменить она не в силах, даже если в функции переменной присваивается новое значение, как только функция закончит работу, значение нашей переменной станет прежним, каким оно было до работы функции. Когда параметр передается по ссылке, то изменение значения переменной внутри функции происходит реально и на выходе из функции наша переменная уже имеет новое значение. Это очень нужная штука, а в Javascript она не работает. 

Однажды делел я проект с бооольшим количеством однотипных объектов и прогнозировать изменение переменных было невозможно, путь был один: заставить сценарий изменить значение входной переменной и вот, как я это реализовал.

В моей таблице стилей CSS задано 2 объекта. Объект с id="d1" имеет ширину 150 px, объект с id="d2" имеет ширину 200 px:

#d1 { width: 150px; }
#d2 { width: 200px; }

В HTML-коде заданы оба объекта (я не привожу этот фрагмент за его несущественностью) и два вызова функции. При первом вызове функция processDecreaseWidth будет изменять значение атрибута width для первого объекта, при следующем вызове функция будет изменять значение атрибута width для второго объекта. Функция processDecreaseWidth имеет два входных параметра. Первый параметр - это id, по которому определяется, с каким объектом работать. Второй параметр - соответствует изменяемой переменной, отвечающей за ширину объекта.

Привожу фрагменты вызова функций:

"javascript:processDecreaseWidth('d1',thisWidthD1)"

"javascript:processDecreaseWidth('d2',thisWidthD2)"

В сценарии на Javascript сначала задаются интересующие нас переменные. Им присваиваются начальные значения ширины объектов, те же, что и в таблице стилей CSS:

var thisWidthD1=150;

thisWidthD2=200;

Затем следует код функции, где ElId - id объекта, thisWidth - ширина объекта. Сначала функция присваивает переменной thisWidth значение новой ширины, затем обрабатываемому объекту присваивается новая ширина:

function processDecreaseWidth(ElId,thisWidth)
{
    if (thisWidth > 2) 
    {
        thisWidth=thisWidth-2;
        document.getElementById(ElId).style.width=thisWidth+"px";
        reformWidth(ElId,thisWidth);
    }
}

Обратите внимание, в конце функции processDecreaseWidth вызывается функция reformWidth, которая присваивает переменным, отвечающим за ширину объекта, новые значения. Вот код этой функции:

function reformWidth(ElId,thisWidth)
{
    switch (ElId)
    {
        case "d1": thisWidthD1=thisWidth;
        break;
        case "d2": thisWidthD2=thisWidth;
        break;
    }
}

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

Добавить комментарий

Комментарии  

Young
0 # Young 17.05.2020 08:41
buy generic viagra pills online sophia viagra hot: http://viagrawinner.com/# viagra 10mg or 20mg legend sophia viagra: http://viagrawinner.com/#
- viagra online uk cheap viagra tadalafil generic
Ответить | Сообщить модератору
Aretha
0 # Aretha 04.04.2020 05:52
viagra safety buy generic viagra online: http://viagenmdx.com/# buy viagra online email
e-mail over the counter viagra cvs: http://viagenmdx.com/# - viagra 10 mg 4 tablet display posts from previous viagra pills price edit options
Ответить | Сообщить модератору
Sommer
0 # Sommer 03.04.2020 04:14
coronavirus fatality rate chloroquine phosphate
250 mg: http://chloroquine-phosphate-250mg.com/# coronavirus 6th remdesivir and chloroquine: http://chloroquine-phosphate-250mg.com/# -
coronavirus 5 million coronavirus zero patient
Ответить | Сообщить модератору
Hye
0 # Hye 01.04.2020 03:37
online viagra generico generic name
for viagra: http://viagenmdx.com/# viagra generic online in descending
order online viagra: http://viagenmdx.com/# - viagra for women dosage registered users viagra information blog not logged in
Ответить | Сообщить модератору
Cortez
0 # Cortez 29.03.2020 22:40
vardenafil viagra viagra order viagra online: http://viagenusa.com/# uk sales
viagra and viagra generic viagra usa pharmacy: http://viagenusa.com/# - viagra
5mg generic replies high doses of viagra
Ответить | Сообщить модератору
Precious
0 # Precious 27.03.2020 19:37
coronavirus 75 alcohol chloroquine drug: http://chloroquine-cureforcoronavirus.com/# coronavirus 0.12 micron buy chloroquine online: http://chloroquine-cureforcoronavirus.com/# - coronavirus 2020 symptoms 2 coronavirus in usa
Ответить | Сообщить модератору
Phoebe
0 # Phoebe 16.03.2020 06:21
viagra and alcohol side effects all times are utc
usa made generic viagra
for men: http://genviagrafx.com/# canadian pharmacy viagra 20mg joined pills for sale: http://genviagrafx.com/# - order cheap viagra
viagra, viagra and levitra
Ответить | Сообщить модератору