Цитата:
Сообщение от 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'ов одинаково и вы передаёте в функцию элементы массива с одинаковым индексом.