How to create a class from another class? (Hierarchy)

2

Hello, everyone.

I have the class Students, StudentMonitor and StudentImagination. These last two classes inherit all Student class methods and attributes (name, enrollment, gender, notes, display (), assignNote (), readNote (), calculateMedia ()) and add new ones to them.

How can I create these two last classes so that the Student class is their parent?

    var Estudante = function (nome, matricula, sexo) {
    this.nome = nome;
    this.matricula = matricula;
    this.sexo = sexo;
    var notas = [];

    this.exibir = function () {
        return "oi";
    };

    this.atribuirNota = function (n) {
        nota.push(n);
    };

    this.lerNota = function (index) {
        return [index-1];
    };

    calcularMedia = function () {
        var x = (notas.length);
        var soma = 0;
        for (i=0;  i<(x - 1); i++ ){
            soma += notas[i];
        }
        var media = soma / x;
        return media;

    }
}

var EstudanteMonitor = Object.create(Estudante);
EstudanteMonitor.prototype.constructor = EstudanteMonitor;

var e1 = new EstudanteMonitor("oi", 2, 3);
console.log(e1.nome);

An example of how I'm trying to do.

    
asked by anonymous 23.10.2016 / 00:15

2 answers

0

Yes, you should declare it like this:

function EstudanteMonitor() {

}
// Aqui vai a herança, você diz que o prototype de EstudanteMonitor é Estudante
EstudanteMonitor.prototype = new Estudante();
var e= new EstudanteMonitor();
console.log(e.exibir())

To inherit also the constructor, you should do so:

function EstudanteMonitor(nome, matricula, sexo) {
   Estudante.call( this, nome, matricula, sexo );
}

Note that StudentMonitor does not have a setting for exibir() , but will work because of inheritance;

See more here: link

    
23.10.2016 / 00:53
2

The modern way of doing this is with classes implemented in the ES6 / ES2015 version of JavaScript / ECMAScript. This is already available in almost all browsers. In this case the syntax is:

class EstudanteMonitor extends Estudante {

and would look like this:

class Estudante {
    constructor(nome, matricula, sexo) {
        this.nome = nome;
        this.matricula = matricula;
        this.sexo = sexo;
        this.notas = [];
    }

    exibir() {
        return 'Nome do estudante: ' + this.nome;
    }

    atribuirNota(n) {
        this.notas.push(n);
    }

    lerNota(index) {
        return this.notas[index - 1];
    }

    calcularMedia() {
        var x = (this.notas.length);
        var soma = 0;
        for (i = 0; i < (x - 1); i++) {
            soma += this.notas[i];
        }
        var media = soma / x;
        return media;
    }
}

class EstudanteMonitor extends Estudante {
    exibir() {
        return 'Nome do estudante monitor: ' + this.nome;
    }
};

var e1 = new Estudante("João", 2, 3);
console.log(e1.exibir()); // "Nome do estudante: João
var em1 = new EstudanteMonitor("João", 2, 3);
console.log(em1.exibir()); // "Nome do estudante monitor: João"

jsFiddle: link

    
23.10.2016 / 08:13