¿Por qué usar la herencia de prototipos encadenados en javascript?

perf

¿Por qué construimos un prototipo de cadena de herencia en lugar de usar la composición de objetos? Mirar hacia arriba a través del prototipo para cada paso en la cadena se vuelve costoso.

Aquí hay un código de ejemplo ficticio:

var lower  = {
    "foo": "bar"
};

var upper = {
    "bar": "foo"
};

var chained = Object.create(lower,  pd(upper));

var chainedPrototype = Object.create(chained);

var combinedPrototype = Object.create(pd.merge(lower, upper));

var o1 = Object.create(chainedPrototypes);
var o2 = Object.create(combinedPrototypes);

usospd porque los descriptores de propiedades son detallados como el infierno.

o2.foo es más rápido queo1.foo ya que solo sube dos cadenas prototipo en lugar de tres.

Desde que subir por la cadena de prototipos es costoso, ¿por qué construimos uno en lugar de usar la composición de objetos?

Otro mejor ejemplo sería:

var Element = {
  // Element methods
}

var Node = {
  // Node methods
}

var setUpChain = Object.create(Element, pd(Node));
var chained = Object.create(setUpChain);
var combined = Object.create(pd.merge(Node, Element));

document.createChainedElement = function() {
  return Object.create(chained);
}

document.createCombinedElement = function() {
  return Object.create(combined);
}

No veo ningún código que combine objetos prototipo para mayor eficiencia. Veo muchos prototipos encadenados de construcción de código. ¿Por qué es este último más popular?

La única razón por la que puedo pensar es usarObject.isPrototypeOf para probar prototipos individuales en su cadena.

Aparte deisPrototypeOf ¿existen claras ventajas de usar la herencia sobre la composición?

Respuestas a la pregunta(3)

Su respuesta a la pregunta