Странное поведение объекта JS при попытке получить доступ к запросу модели, связанной с петлей

Я работаю с Loopback Framework, занимаюсь веб-проектом. Но я думаю, что вопрос, который я здесь ставлю, имеет отношение не столько к этому, сколько к общим знаниям Javascript / Node.JS.

В одной части кода я делаю:

roleMapping.find({
        where: {
            principalType: 'USER',
            principalId: context.principals[0].id
        },
        include: 'role'
    }, function(err, roles){
        console.log(roles[0]);
        for (var i in roles)
        {
            if (roles[i].role.name === 'teamLeader' &&
                roles[i].groupId === context.modelId)
            {
                cb(null,true);
            }else {
                cb(null,false);
            }
        }
});

Хорошо с этим, но это не удается при попытке сравнитьroles[i].role.name, Итак, я пошел, чтоroles[i] объект содержится.

    { groupId: 1,
  id: 3,
  principalType: 'USER',
  principalId: 1,
  roleId: 2,
  role: 
   { id: 2,
     name: 'teamLeader',
     description: 'The leader(s) of a team',
     created: null,
     modified: null } }

Хорошо, ничего плохого, но все равно не получается, поэтому я попытался напечатать толькоrole имущество. И к моему удивлению:

{ [Function]
  update: [Function],
  destroy: [Function],
  create: [Function],
  build: [Function],
  _targetClass: 'Role' }

Итакrole свойство кажется какой-то функцией? Но как это было правильно напечатано раньше?

В конце концов, потерянный в моем разочаровании, я попыталсяvar role = JSON.parse(JSON.stringify(roles[i]));

И тогда я мог бы нормально обращаться к каждому свойству объекта, но это не чисто и не нормально.

Это взорвало мой ум впервые за годы программирования на JS (хотя и любительское), и я был бы рад, если бы кто-то смог мне это прояснить. Спасибо

РЕДАКТИРОВАТЬ: Кажется, что это специфично для этой структуры, поэтому я меняю название, чтобы помочь сообществу.

Ответы на вопрос(1)

Ваш ответ на вопрос