En javascript existe la herencia basada en prototipo. Es la idea de utilizar composición de objetos para implementar herencia. Vamos a detenernos un momento. Que es la herencia? Y que es composición?
Herencia es la idea de relacionar estructuras de datos u objetos entre si para poder reutilizar código sin repetición. Dependiendo del lenguaje y el tipo de herencia esto tiene una implementación y explicación diferente.
Bueno ahora que es la composición. La idea es que un objeto puede accesar funcionalidad por medio de otros objetos. Por ejemplo, objeto A tiene una referencia a objeto B por lo tanto puede hacer cosas que B puede hacer por medio de delegación. Si B tiene un método "imprimir” entonces A puede utilizar B para ofrecer esa funcionalidad o extender esa funcionalidad.
Ya que entendemos que es la herencia y que es la composición entonces veamos que es la herencia basada en prototipo. La idea es utilizar composición para implementar un tipo de herencia. En javascript la herencia de prototipo es composición de prototipos.
En javascript prácticamente todo es un objeto, con la excepción de null y undefined. En teoría los primitivos no lo son pero en la practica javascript les agrega un wrapper para poder accesorios como objetos con propiedad y métodos de ayuda.
Bueno ya que sabemos esto, vamos a asumir pro simplicidad que todo es un objeto. Sabiendo a esto veamos la primera característica de la herencia basada en prototipos.
Todos los objetos tienen un prototipo
Esto suena mas complicado de lo que es, pero en realidad esto significa que todos los objetos tienen una propiedad que es un prototipo. Este prototipo es un objeto que almacena propiedades y métodos que son públicos y todo mundo puede accesar. Por ejemplo en javascript el prototipo para objetos String tiene propiedades como, substring, length, charAt, etc. Estas propiedad viven en el prototipo no en el objeto. Por lo tanto todos los objetos string pueden accesar estas propiedades por medio del prototipo. Si se hace un cambio al prototipo entonces todos los objetos String tienen acceso al cambio debido a que comparten el mismo prototipo.
Todos los prototipos tienen un prototipo
Vamos a ver la segunda característica de la herencia basada en prototipos. Todos los prototipos tienen un prototipo. Esto tal vez te suena complicado pero en realidad es muy sencillo. Un prototipo dijimos que es un objecto y como objeto tiene propiedades. Una de estas propiedades es otro prototipo. Tal vez te estas preguntando para que se necesita que un prototipo tenga otro prototipo. A esto se le llama la cadena de prototipos. Bueno esto es lo que nos permite tener la herencia basada en prototipos.
La cadena de prototipos es la forma en la que javascript te permite accesar propiedades que existen en la cadena de prototipos sin necesidad de manualmente tener que especificar en que nivel de la cadena esta esta propiedad.
Todos los objetos heredan de Object
Cuando se crear un nuevo objeto en javascript siempre hereda el objeto Object que es el objeto base de todos los demás. Es el único objeto que no tiene un prototipo. La cadena de prototipo debe de tener un final de otra forma se generaría un ciclo infinito al intentar navegar la cadena de prototipos es por eso que Object no tiene un prototipo o de una forma mas correcta, su prototipo es null.
Funciones constructoras
En javascript existen funciones constructores las cuales son funciones que nos permiten crear nuevos tipos de objetos. Es decir objetos con un nuevo prototipo que podemos modificar sin afectar a los demás prototipos. Esto se hace por medio de crear una función e invocar la función utilizando la palabra reservada “new”. Esto creara un nuevo objeto que tendrá un prototipo igual al prototipo “prototype” que existe en la función. Ojo este prototipo es diferente al prototipo de la función.
Негізгі бет Que es el prototype en javascript?
Пікірлер: 34