Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Herança e super

Porque recebo undefined nesse código?? estou usando corretamente o método super? não entendi muito bem a lógica dele

class Ping {
    constructor(){}
    ping(){return 'ping'}
}
class Pingpong extends Ping{
    constructor(){}
    pingpong(){ return super.ping + 'pong' }
}
console.log(Pingpong.pingpong)

// resultado:  undefined
2 respostas
solução!

Olá!

Há alguns pontos a serem destacados antes de chegarmos no resultado.

Começando pelo constructor(), se sua classe não possui atributos para serem inicializados por ele, não há necessidade de declará-lo. Caso a classe pai (Ping) possuísse atributos, aí sim seria necessário inicializá-los no constructor , sendo preciso também adicionar o método super() no constructor da classe filha (Pingpong) para que o comportamento da classe pai fosse herdado.

class Ping {
    ping() {
      return 'ping'
    }
}

Na classe Pingpong, pelo mesmo motivo citado acima, não há necessidade dela possuir um constructor(), já que ela não está herdando atributos da classe pai e nem possui atributos exclusivos. Outro problema nesta classe é que você está tentando retornar a referência da função ping ao invés do resultado da sua execução. Para você executar uma função, é necessário adicionar () após sua referência.

class Pingpong extends Ping {
    pingpong() {
      return super.ping() + 'pong'
    }
}

Por fim, é preciso instanciar a classe antes de utilizá-la. Depois de instanciada, seus métodos e atributos podem ser utilizados (Não esquecer de adicionar () para que a função seja executada).

const pp = new Pingpong()

console.log(pp.pingpong())

Código completo:

class Ping {
    ping() {
      return 'ping'
    }
}

class Pingpong extends Ping {
    pingpong() {
      return super.ping() + 'pong'
    }
}

const pp = new Pingpong()

console.log(pp.pingpong())

// resultado:  pingpong

Obrigada, não sabia que precisava ser instânciada antes de ser usada

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software