ventajas ultima tutorial que español ejemplos desventajas descargar caracteristicas javascript oop inheritance prototype-programming

tutorial - ultima version de javascript



¿Qué significa que Javascript es un lenguaje basado en prototipos? (7)

Una de las principales ventajas de Javascript se dice que es un lenguaje basado en prototipos.

Pero, ¿qué significa que Javascript esté basado en prototipos y por qué es una ventaja?


Después de leer todas las respuestas, esta es la conclusión.

1) Herencia en la que los objetos se heredan directamente de otros objetos

2) Eso no usa clases.

3) También llamada programación basada en instancias o programación orientada a prototipos sin clase.

4) La reutilización del comportamiento se realiza mediante la clonación de objetos existentes que sirven como prototipos

5) Objeto utilizado como plantilla del nuevo objeto obtener propiedades iniciales


En lugar de declarar una estructura de clase, puede crear objetos del mismo tipo y agregarlos a su definición en cualquier momento que desee con el prototipo del objeto. Es más flexible que la forma normal de hacer las cosas.


La programación basada en prototipos es un estilo de programación orientada a objetos donde las clases no están presentes, y la reutilización del comportamiento (o la herencia en lenguajes basados ​​en clases) se realiza clonando objetos existentes que sirven como prototipos.


La ventaja / desventaja es que podemos crear nuevos tipos de objetos en tiempo de ejecución sin necesidad de definir clases (código estático). Como la mayoría de las funciones, depende del desarrollador convertirlo en una ventaja / desventaja.

Lo anterior es posible porque los objetos son esencialmente funciones en el script java (cierres también).


Si solo usa objetos en tiempo de ejecución en lugar de una clase en compilación para construir nuevos objetos, esto abre la posibilidad de extender un objeto sin conocer ningún detalle sobre él. Por supuesto, puede convertirse en una desventaja bastante rápido dependiendo del uso. No hago suposiciones sobre el idioma aquí, por lo que es aplicable a otros idiomas distintos de javascript que no son tan dinámicos.

myobject.prototype=unkownobject; myobject.newproperty=1;

Puede obtener el objeto desde cualquier lugar; su propio código, desde la red, desde la base de datos, desde enlaces externos y así sucesivamente.

Tenga en cuenta que un lenguaje no tiene que implementar la herencia de prototipo como javascript. En javascript, un objeto prototipo simplemente se comparte, al igual que sus propiedades, entre los herederos. La alternativa es copiar todas las propiedades del prototipo al nuevo objeto. Cada enfoque tiene sus puntos fuertes en diferentes situaciones. Me gusta el segundo más, pero no es lo que hace javascript.


Un lenguaje basado en prototipos, no hace la distinción entre clases y objetos: simplemente tiene objetos. Un lenguaje basado en prototipos tiene la noción de un objeto prototípico, un objeto que se utiliza como una plantilla desde la cual se obtienen las propiedades iniciales para un nuevo objeto. Cualquier objeto puede especificar sus propias propiedades, ya sea cuando lo cree o en tiempo de ejecución. Además, cualquier objeto puede asociarse como prototipo de otro objeto , lo que permite que el segundo objeto comparta las propiedades del primer objeto.


La herencia prototípica es una forma de reutilización de código orientada a objetos. Javascript es uno de los únicos lenguajes orientados a objetos [mainstream] para usar la herencia prototípica. Casi todos los otros lenguajes orientados a objetos son clásicos.

En la herencia clásica , el programador escribe una clase, que define un objeto. Se pueden crear instancias de varios objetos de la misma clase, por lo que tiene un código en un lugar que describe varios objetos en su programa. Las clases pueden organizarse en una jerarquía, lo que fomenta la reutilización del código. El código más general se almacena en una clase de nivel superior, de la que se heredan las clases de nivel inferior. Esto significa que un objeto está compartiendo código con otros objetos de la misma clase, así como con sus clases primarias.

En la forma de herencia prototípica , los objetos heredan directamente de otros objetos. Todo el negocio de las clases desaparece. Si quieres un objeto, simplemente escribe un objeto. Pero la reutilización del código sigue siendo una cosa valiosa, por lo que los objetos se pueden vincular entre sí en una jerarquía. En javascript, cada objeto tiene un enlace secreto al objeto que lo creó, formando una cadena. Cuando se solicita a un objeto una propiedad que no tiene, se le preguntará a su objeto principal ... continuamente en la cadena hasta que se encuentre la propiedad o hasta que se alcance el objeto raíz.

Cada función en JavaScript (que son objetos en sí mismos) en realidad tiene un miembro llamado "prototipo", que es responsable de proporcionar valores cuando se les pide un objeto. Tener este miembro permite que el mecanismo constructor (mediante el cual los objetos se construyen a partir de funciones) funcione. Al agregar una propiedad al prototipo de un objeto de función, estará disponible para el objeto construido, así como para todos los objetos que heredan de él.

Ventajas

Puede que no haya una regla estricta y rápida sobre por qué la herencia prototípica es una forma ventajosa de reutilización de código. La reutilización del código en sí es ventajosa, y la herencia prototípica es una forma sensata de hacerlo. Podría argumentar que la herencia prototípica es un modelo bastante simple de reutilización de código, y ese código puede ser reutilizado en gran medida de manera directa . Pero las lenguas clásicas son ciertamente capaces de lograr esto también.

Nota al margen : @Andrew Hedges hace una buena observación , que en realidad hay many lenguajes prototípicos. Vale la pena señalar que estos otros existen, pero también vale la pena señalar que ninguno de ellos es algo cercano a la corriente principal. NewtonScript pareció tener algo de tracción por un tiempo, pero murió con su plataforma. También es posible extender algunos idiomas modernos de manera que se agreguen capacidades prototípicas.