1
resposta

[Dúvida] Personagem mestre nivel 1?

Bem, depois de criarmos o get, que faz com que podemos utilizar a propriedade level em outras classes, pensei em replicar a mesma coisa que fizemos na classe guerreiro nos outros personagens


//arqueiro
obterInsignia() {
        if(this.level >= 6 && this.destreza >= 6 && this.level >= 6) {
            return 'Mestre das flechas'
        }
        return super.obterInsignia()
    }
    //mago
    obterInsignia() {
        if(this.level >= 6 && this.levelMagico >= 6 && this.inteligencia >= 6) {
            return Mestre do ${this.elementoMagico}
        }
        return super.obterInsignia()
    }

alterando esses dois métodos pensei que não iria precisar inserir essa condição no método da classe ArqueiroMago porém a condição não estava sendo respeitada e o arqueiroMago continuava sendo mestre mesmo em um level baixo até que fiz a seguinte alteração:

 obterInsignia(){
        if ( this.level >= 6){
        return`${this.ladoArqueiro.obterInsignia()} e ${this.ladoMago.obterInsignia()} `
        }
        return super.obterInsignia()
    }

depois disso alterando o level para abaixo de 6 o arqueiroMago deixava de ser mestre, mas minha duvida é a seguinte porque isso não acontecia antes, pois this.ladoArqueiro.obterInsignia() e this.ladoMago.obterInsignia() já contem essa condição

1 resposta

Oi, Matheus, tudo bem?

Entendo que você está confuso com o comportamento dos métodos obterInsignia() nas classes Arqueiro e Mago. Vou tentar esclarecer isso para você.

O que acontece é que, quando você chama this.ladoArqueiro.obterInsignia() e this.ladoMago.obterInsignia() na classe ArqueiroMago, você está chamando os métodos obterInsignia() das classes Arqueiro e Mago respectivamente, e não o método da classe ArqueiroMago.

Isso significa que, mesmo que a condição this.level >= 6 esteja presente nos métodos obterInsignia() das classes Arqueiro e Mago, essa condição é verificada no contexto dessas classes, e não no contexto da classe ArqueiroMago. Ou seja, o this.level que está sendo verificado é o level da instância de Arqueiro ou Mago, e não o level da instância de ArqueiroMago.

Quando você adicionou a condição this.level >= 6 no método obterInsignia() da classe ArqueiroMago, você fez com que o level da instância de ArqueiroMago fosse verificado. Isso significa que, mesmo que a instância de Arqueiro ou Mago tenha level maior ou igual a 6, a insignia de mestre só será retornada se a instância de ArqueiroMago também tiver level maior ou igual a 6.

Espero que isso esclareça sua dúvida. O conceito de this e contexto pode ser um pouco confuso no início, mas com a prática e estudo, você vai se familiarizar com ele.

Espero ter ajudado. Caso tenha dúvidas, conte com o fórum. Abraços!

Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!