Differential inheritance in JavaScript

Introdução

A herança diferencial é um modelo de herança comum usado por linguagens de programação baseadas em protótipo, como JavaScript. Ele opera com o princípio de que a maioria dos objetos é derivada de outros objetos mais gerais e diferem apenas em alguns aspectos pequenos; enquanto normalmente mantém uma lista de ponteiros internamente para outros objetos dos quais o objeto difere.

Exemplo

O código a seguir fornece um método simples que "herda" um objeto:

Object.prototype.inherit = function(){
  // Create a new object with this as its prototype
  var p = Object.create(this);

  /* actually not necessary:
  // Apply the constructor on the new object
  this.constructor.apply(p, arguments);
  */

  return p;
};
Usando herdar, torna-se possível derivar objetos mais específicos de um protótipo genérico. A seguir, é apresentado um exemplo simples de criação de objetos cada vez mais específicos, usando o método de herança e a herança diferencial.
var root = {}; // Could be any object with any prototype object

var record = root.inherit();
record.toString = function(){ return "a Record"; };
 
var person = root.inherit();
person.firstName = false;
person.lastName = false;
person.toString = function(){
    if (this.firstName) {
        if (this.lastName) {
            return this.firstName + " " + this.lastName;
        } else {
            return this.firstName;
        }
    } else if (this.lastName) {
        return this.lastName;
    } else {
        return "a Person";
    }
};
 
JoePerson = person.inherit();
JoePerson.firstName = "Joe";
alert( JoePerson.toString() );

Veja Também