Herencia no múltiple

  • Enlace amigable (slug) de la revisión: Guía_JavaScript_1.5/Más_sobre_la_herencia_de_propiedades/Herencia_no_múltiple
  • Título de la revisión: Herencia no múltiple
  • Id de la revisión: 259596
  • Creada:
  • Creador: Mgjbot
  • ¿Es la revisión actual?
  • Comentario robot Añadido: [[en:Core JavaScript 1.5 Guide:Property Inheritance Revisited:No Multiple Inheritance]] <<langbot>>

Contenido de la revisión

Herencia no múltiple

Algunos lenguajes orientados a objetos permiten herencia múltiple. Esto es, un objeto puede heredar las propiedades y valores de objetos padres no relacionados. JavaScript no soporta la herencia múltiple.

La herencia del valor de una propiedad en tiempo de ejecución ocurre porque JavaScript busca la cadena prototipada de un objeto para encontrar un valor. Porque un objeto posee un solo prototipo asociado, JavaScript no hereda dinámicamente más de una cadena prototipada.

En JavaScript, puede poseer una función constructora que invoca a más de una otra función constructora dentro de esta. Esto da la ilusión de múltiple herencia. Por ejemplo, considérese las siguientes sentencias:

function Hobbyist (hobby) {
   this.hobby = hobby || "scuba";
}

function Ingeniero (nombre, proyecto, maquina, hobby) {
   this.base1 = Trabajador;
   this.base1(nombre, "ingeniería", proyecto);
   this.base2 = Hobbyist;
   this.base2(hobby);
   this.maquina = maquina || "";
}
Ingeniero.prototype = new Trabajador;

dennis = new Ingeniero("Doe, Dennis", ["collabra"], "hugo")

A futuro se asume que la definición de Trabajador tal como se utilizó anteriormente en este capítulo. En este caso, el objeto dennis posee estas propiedades:

dennis.nombre == "Doe, Dennis"
dennis.departamento == "ingeniería"
dennis.proyecto == ["collabra"]
dennis.maquina == "hugo"
dennis.hobby == "scuba"

Así que dennis no tiene la propiedad hobby desde el constructor Hobbyist. Sin embargo, se asume que usted luego añade una propiedad al prototipo del constructor de Hobbyist:

Hobbyist.prototype.equipo = ["máscara", "aletas", "regulador", "bcd"]

El objeto dennis no hereda esta nueva propiedad.

{{ AnteriorSiguiente("Guía JavaScript 1.5:Más sobre la herencia de propiedades:Información global en los constructores", "Guía JavaScript 1.5:Concepto general de LiveConnect") }}

{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Property_Inheritance_Revisited/No_Multiple_Inheritance", "ja": "ja/Core_JavaScript_1.5_Guide/Property_Inheritance_Revisited/No_Multiple_Inheritance", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Powr\u00f3t_dziedziczenia_w\u0142asno\u015bci/Brak_wielokrotnego_dziedziczenia" } ) }}

Fuente de la revisión

<p>
</p>
<h3 id="Herencia_no_m.C3.BAltiple" name="Herencia_no_m.C3.BAltiple"> Herencia no múltiple </h3>
<p>Algunos lenguajes orientados a objetos permiten herencia múltiple. Esto es, un objeto puede heredar las propiedades y valores de objetos padres no relacionados. JavaScript no soporta la herencia múltiple.
</p><p>La herencia del valor de una propiedad en tiempo de ejecución ocurre porque JavaScript busca la cadena prototipada de un objeto para encontrar un valor. Porque un objeto posee un solo prototipo asociado, JavaScript no hereda dinámicamente más de una cadena prototipada.
</p><p>En JavaScript, puede poseer una función constructora que invoca a más de una otra función constructora dentro de esta. Esto da la ilusión de múltiple herencia. Por ejemplo, considérese las siguientes sentencias:
</p>
<pre>function Hobbyist (hobby) {
   this.hobby = hobby || "scuba";
}

function Ingeniero (nombre, proyecto, maquina, hobby) {
   this.base1 = Trabajador;
   this.base1(nombre, "ingeniería", proyecto);
   this.base2 = Hobbyist;
   this.base2(hobby);
   this.maquina = maquina || "";
}
Ingeniero.prototype = new Trabajador;

dennis = new Ingeniero("Doe, Dennis", ["collabra"], "hugo")
</pre>
<p>A futuro se asume que la definición de <code>Trabajador</code> tal como se utilizó anteriormente en este capítulo. En este caso, el objeto dennis posee estas propiedades:
</p>
<pre>dennis.nombre == "Doe, Dennis"
dennis.departamento == "ingeniería"
dennis.proyecto == ["collabra"]
dennis.maquina == "hugo"
dennis.hobby == "scuba"
</pre>
<p>Así que dennis no tiene la propiedad <code>hobby</code> desde el constructor <code>Hobbyist</code>. Sin embargo, se asume que usted luego añade una propiedad al prototipo del constructor de <code>Hobbyist</code>:
</p>
<pre>Hobbyist.prototype.equipo = ["máscara", "aletas", "regulador", "bcd"]
</pre>
<p>El objeto <code>dennis</code> no hereda esta nueva propiedad.
</p>
<div class="noinclude">
<p>{{ AnteriorSiguiente("Guía JavaScript 1.5:Más sobre la herencia de propiedades:Información global en los constructores", "Guía JavaScript 1.5:Concepto general de LiveConnect") }}
</p>
</div>
<div class="noinclude">
</div>
{{ languages( { "en": "en/Core_JavaScript_1.5_Guide/Property_Inheritance_Revisited/No_Multiple_Inheritance", "ja": "ja/Core_JavaScript_1.5_Guide/Property_Inheritance_Revisited/No_Multiple_Inheritance", "pl": "pl/Przewodnik_po_j\u0119zyku_JavaScript_1.5/Powr\u00f3t_dziedziczenia_w\u0142asno\u015bci/Brak_wielokrotnego_dziedziczenia" } ) }}
Revertir a esta revisión