Approccio di progettazione delle gerarchie di ereditarietà - Javascript [chiuso]

-1

Per il codice seguente, che crea la gerarchia di ereditarietà,

function Animal(){
    this.name = "Animal";

    // toString is a function in the main Object that every
    // object inherits from
    this.toString = function() {
        return "My name is : " + this.name;
    };
}


function Rodent(){
   this.name = "Rodent";
}

function Rat(){
  this.name = "Rat";
}

Rodent.prototype = new Animal();
Rat.prototype = new Rodent();

Rodent.prototype.constructor = Rodent;
Rat.prototype.constructor = Rat;

var caneRat = new Rat();

document.write(caneRat.toString() + "<br />");

viene eseguita una piccola modifica sostituendo completamente Rat.prototype con Rodent.prototype , come secondo approccio, mostrato sotto,

function Animal(){
    this.name = "Animal";

    // toString is a function in the main Object that every
    // object inherits from
    this.toString = function() {
        return "My name is : " + this.name;
    };
}


function Rodent(){
   this.name = "Rodent";
}

function Rat(){
  this.name = "Rat";
}

Rodent.prototype = new Animal();
Rat.prototype = Rodent.prototype;
Rodent.prototype.constructor = Rodent;

var caneRat = new Rat();

document.write(caneRat.toString() + "<br />");  

Quali sono i vantaggi & svantaggi nel secondo approccio della gerarchia dell'ereditarietà rispetto al primo approccio? Il secondo approccio è visualizzato come mostrato di seguito ..

    
posta overexchange 07.12.2015 - 11:06
fonte

1 risposta

5

In genere è abbastanza imbarazzante e soggetto a errori per implementare "l'ereditarietà classica" in JavaScript. Invece, prova a lavorare con con la lingua e usa la delega del comportamento:

var Animal = {
  setName: function(name) {
    this.name = name;
  },

  sayName: function() {
    return 'My name is: ' + this.name;
  }
};

var Rodent = Object.create(Animal);
var Rat = Object.create(Rodent);
var caneRat = Object.create(Rat);

caneRat.setName('Rat');

console.log(caneRat.sayName()); // 'My name is Rat'

Probabilmente scoprirai che puoi eliminare molte delle tue "sottoclassi" con questo approccio.

Per maggiori dettagli sui prototipi in JavaScript, dai un'occhiata a this .

Inoltre, cerca di evitare di sovrascrivere i metodi degli oggetti nativi (ad esempio toString ) a meno che tu non abbia una buona ragione per farlo.

    
risposta data 08.12.2015 - 00:05
fonte

Leggi altre domande sui tag