Показать сообщение отдельно
Старый 17.06.2018, 22:56   #90
Letos
Консультант
 
Регистрация: 28.06.2017
Сообщений: 555
Сказал(а) спасибо: 127
Поблагодарили 1,030 раз(а) в 366 сообщениях
Вес репутации: 344
Letos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордитсяLetos за этого человека можно гордится
По умолчанию

Цитата:
Сообщение от Guamoko Посмотреть сообщение
Прошу указать на мою ошибку.
Спасибо.
Ошибка в этой строке:
Код:
HNap(mater[i],hnap[j]);
Вы пытаетесь в свою функцию передать строку вместо объекта (ведь у вас в массиве хранятся строки). Ее можно решить двумя способами (выбирайте понравившийся, который вам удобнее понять):

Вариант 1


Код:
var mater = ["Mater11", "Mater21", "Mater31"];
var hnap = ["HNap11", "HNap21", "HNap31"];
Window1.Hprm.OnValueChange = function () {
    for (var i = 0, j = 0; i < mater.length, j < hnap.length; i++ , j++) {
        HNap(Window1[mater[i]], Window1[hnap[j]]);
    }
}
Здесь перед передачей в функцию у окна запрашиваются свойства по имени из массива.
[свернуть]

Вариант 2


Код:
var mater = [Window1.Mater11, Window1.Mater21, Window1.Mater31];
var hnap = [Window1.HNap11, Window1.HNap21, Window1.HNap31];
Window1.Hprm.OnValueChange = function () {
    for (var i = 0, j = 0; i < mater.length, j < hnap.length; i++ , j++) {
        HNap(mater[i], hnap[j]);
    }
}
Здесь сразу в массив записываются свойства и потом просто передаются в функцию. Я считаю этот вариант наиболее понятным.
[свернуть]

Пока писал варианты придумал еще один "изврат" на основе первого варианта. Используется как "смотрите, что можно сделать", но, по-моему этот вариант сложнее читать, чем первые два.:

"изврат"


Код:
const mater = "Mater"
const hnap = "HNap"
Window1.Hprm.OnValueChange = function () {
    for (var i = 0; i < mater.length; i++) {
        HNap(Window1[mater + i + '1'], Window1[hnap + i + '1']);
    }
}
[свернуть]


P.S. Я писал всё это без проверки, поэтому возможны опечатки.


P.P.S.Из "придраться по поводу кода":
1. почему вы используете "arguments[0]" и "arguments[1]" вместо "Mater11" и "Hnap11"? Имхо, в вашем случае читаемость скрипта хуже.
2. Такой цикл тоже кажется странным:
Код:
for (var i=0, j=0; i<mater.length, j<hnap.length; i++, j++)
Ведь на каждой итерации (в вашем примере) у вас переменные i и j равны, и можно просто использовать лишь одну из них. Но это замечание актуально только если у вас количество mater'ов и hnap'ов одинаково и вы передаёте в функцию элементы массива с одинаковым индексом.
Letos вне форума   Ответить с цитированием Вверх
2 пользователя(ей) сказали cпасибо:
Briz (18.06.2018), Guamoko (18.06.2018)