Modificar valor de propriedade usando método - JavaScript

28/08/2022

0

Olá, estou modificando um código JS referente a um projeto de perguntas e respostas e estou tendo um problema ao tentar mudar o valor de uma propriedade com um metodo.

A lógica do código é a seguinte:
- Tenho 2 métodos, 1 para identificar o numero da pergunta e passar a seguinte, e outro método que armazena o numero da pergunta. (getQuestionIndex e questionIndex)
- Se o usuario clicar em um determinado botão (btnnext) ele dispara um método que adiciona um valor(++) a propiedade chamada questionIndex.
- O valor padrão de questionIndex é 1

Problema::::
Ao executar um console.log(questionIndex) dentro do método 'Prox' posso verificar que ele efetivamente esta adicionando um valor quando chamado, porem não acontece nada com a página(o normal seria que ela passa a proxima pergunta).
Se eu executar this.questionIndex++ dentro de um if efetivamente a adição acontece e a pergunta troca (no código coloquei um comentario onde o código funcionaria como eu quero), más ao colocar isso dentro de um outro método que é meu objetivo, não funciona.

import { Question } from "./question.js"
import { UI } from "./interfaz.js"

export class Quiz{

    questionIndex = 1 //numero da pergunta
    score = 1

    /**
     * 
     * @param {Question[]} questions 
     */

    constructor(questions){
        this.questions = questions
    }

    /**
     * 
     * @returns 
     */

    get getQuestionIndex(){ //verifica o numero da pergunta
        return this.questions[this.questionIndex]
    }

    isEnded(){
        return this.questions.length === this.questionIndex
    }

    /**
     * 
     * @param  answer 
     */

    set prox (questionIndex) { // se click no btnnext dispara este método
        this.questionIndex++  // adiciona +1 no questionIndex, aqui vai 2 simbolos de mais, não sei pq não aparece
        this.score++
        console.log(this.questionIndex)
        console.log(this)
    }

    guess(answer, callback){ /** SI LA PREGUNTA ES CORRECTA */
        if(this.getQuestionIndex.correctAnswer(answer)){
            let correcta = document.getElementById("correct")
            const btnnext = document.getElementById("btnnext")
            const self = this

            correcta.classList.replace("none", "contenidocorrecto")

            if(incorrect.classList = "contenidoincorrecto"){
                incorrect.classList.replace("contenidoincorrecto", "none")
            }
            btnnext.addEventListener('click', () => self.prox = this.prox) //se clickar no btnnext dispara o método prox
     // se eu colocar aqui o this.questionIndex++ ele funciona perfeitamente, porem se eu colocar no método prox ele funciona más nada acontece
        }else{ /** SI LA PREGUNTA ES INCORRECTA */
            const incorrect = document.getElementById("incorrect")

            incorrect.classList.replace("none", "contenidoincorrecto")
        }   
    }
}
// function prox(){
//     console.log(this)
// }
Cristian Rodriguez

Cristian Rodriguez

Responder

Posts

20/09/2022

Kleber Wilcke

Desculpa sou iniciante em javascript, talvez fale besteira, mas não custa tentar. Talvez se colocar um return no final da função prox, funcione, mas posso estar falando a maior besteira do mundo.
set prox (questionIndex) { // se click no btnnext dispara este método
        this.questionIndex++  // adiciona +1 no questionIndex, aqui vai 2 simbolos de mais, não sei pq não aparece
        this.score++
        console.log(this.questionIndex)
        console.log(this)
        return questionIndex;    //Adicione esta linha
    }
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar