@Makito

Как сформировать методы объекта через цикл?

Подскажите знающие люди а то что то у меня тупой затык.
Имею коллекцию:
var collection = [
    {
        name1: 'strName1',
        name2: 'strParam1'
    },
    {
        name1: 'strName2',
        name2: 'strParam2'
    }
];

и есть к примеру пустой объект:
var obj = {};
Я хочу обойти коллекцию циклом и создать для объекта методы:
for (var i = 0, ln = collection.length; i < l; i++) {
    var param = collection[i];
    obj[param.name1 + 'State'] = function() {
        return param.name2;
    };
}

И тут я понимаю что делаю неверно, так как внутри метода объекта не будет никаких param.name2, но понять как сделать верно - не догоняю.
  • Вопрос задан
  • 2273 просмотра
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Читаем про замыкания, контекст вызова, скоупы и все такое.

Спойлер: Внутри вашего метода будут доступны param.name2 и param.name1.
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@Makito Автор вопроса
Спасибо Сергей Протько
Еще раз написал на замыкании, и нашел у себя ошибку в методе, в результате которой я думал что метод не работает.
Ответ написан
Комментировать
mlnkv
@mlnkv
JavaScript Developer
for (var i = 0, ln = collection.length; i < ln; i++) {
  var param = collection[i];    
  obj[param.name1 + 'State'] = (function(str) {
    return function() {
      return str;
    }
  })(param.name2);
}
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы