Herança com Prototype


O termo “Herança” é muito usado para descrever que as características de um objeto são passadas para outro objeto. Assim como uma filha(o) pode herdar características da sua mãe/pai (geneticamente). Por isso é utilizado esse termo para descrever o comportamento desejado. Além disso, a maioria das literaturas, incluindo as documentações (como MDN) citam a palavra herança.

Javascript não é uma linguagem que apresenta essa característica em específico, portanto o termo mais adequado para descrever “herança” no JavaScript é delegação.

Exemplo

function Produto(nome, preco) {
  this.nome = nome;
  this.preco = preco;
}
 
Produto.prototype.aumento = function (quantia) {
  this.preco += quantia;
};
 
function Camiseta(nome, preco, cor) {
  Produto.call(this, nome, preco);
  this.cor = cor;
}
Camiseta.prototype = Object.create(Produto.prototype);
Camiseta.prototype.constructor = Camiseta;

No trecho:

Camiseta.prototype = Object.create(Produto.prototype);

Camiseta.prototype é um novo objeto vazio que tem como protótipo Produto.prototype. Dessa forma, é adicionando Camiseta.prototype na cadeia de protótipos de Produto. Por consequência, tudo o que não existir em Camiseta nem em Camiseta.prototype (__proto__) será delegado para Produto.prototype, e assim por diante até chegar no topo da cadeia de protótipos. Por isso o termo delegação é o mais apropriado para este comportamento.

Referências