Comportamento estranho do objeto JS ao tentar acessar a consulta de modelo relacionada ao loopback

Estou trabalhando com o Loopback Framework, fazendo um projeto da web. Mas acho que a pergunta que estou expondo aqui tem menos a ver com isso, mas com o conhecimento geral sobre Javascript / Node.JS.

Em uma parte do código, estou fazendo:

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);
            }
        }
});

Aprovação com isto, mas falha ao tentar compararroles[i].role.name. Então, eu fui registrar o que oroles[i] objeto contido.

    { 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 } }

Ok, nada de errado, mas ainda falha, então tentei imprimir apenas orole propriedade. E para minha surpresa:

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

Então orole propriedade parece ser algum tipo de função? Mas como foi impresso corretamente antes?

Eventualmente, perdido em minha frustração, tenteivar role = JSON.parse(JSON.stringify(roles[i]));

E então eu poderia acessar todas as propriedades do objeto normalmente, mas isso não é limpo nem normal.

Isso me impressionou pela primeira vez em anos de programação JS (embora meio amadorista), e eu ficaria satisfeito se alguém pudesse esclarecer isso para mim. obrigado

Edição: Parece que é específico para este quadro, por isso estou mudando de título para ajudar a comunidade.

questionAnswers(1)

yourAnswerToTheQuestion