Показать сообщение отдельно
  #1 (permalink)  
Старый 02.04.2017, 09:22
Новичок на форуме
Отправить личное сообщение для AndVGri Посмотреть профиль Найти все сообщения от AndVGri
 
Регистрация: 02.04.2017
Сообщений: 3

Использование this во вложенных структурах
Доброе время суток.
Немного о сути задачи. Есть система, которая для внутренней автоматизации использует javascript. Задачей стоит перенос данных атрибутов объектов системы из таблиц Excel (каждая таблица описывает данные своего типа объекта).
Так как типов объектов много, то хотелось бы код переноса сделать более универсальным, так как каждый тип атрибута требует (в зависимости от типа значения) своего оформления для записи.
Для этого собственно создал ниже представленную структуру, которая описывает для каждого столбца таблицы функцию value, код который создаёт требуемое оформление. Массив cols объекта colReader описывает связь данных столбцов строки с атрибутами объектов и функцией оформления значения ячейки в формат типа атрибута.
var nextRow = ["123", "23.4", "abc"];
var colReader =
{
    row : null,
    cols :
    [
        { colId : 0, 
          AttrId : 234, 
          value : function() {return parseInt(colReader.row[this.colId]);} },
        { colId : 1, 
          AttrId : 541,
          value : function() {return parseFloat(colReader.row[this.colId]);} },
        { colId : 2, 
          AttrId : 143,
          value : function() {return colReader.row[this.colId]; } }
    ]
};
colReader.row = nextRow;
for (var i = 0; i < colReader.cols.length; i++)
{
    // сохранение новых значений атрибутов объекта
    // obj.Attribute(colReader.cols[i].AttrId).setValue(colReader.cols[i].value());
    console.log( colReader.cols[i].value() );
};

В примере nextRow представлена массивом. В отладчике Chrome всё работает.
Собственно, к теме вопроса. Я только начинаю изучать javascript.
Насколько понял ключевое слово this относится свойствам объекта, определяемого function. Но почему у меня получилось обратиться к полю colId объекта, для которого определена функция value?
И каким способом из функции value обратиться к полю row, не используя имя переменной объекта colReader?

Заранее спасибо всем откликнувшимся.
Ответить с цитированием