La programación orientada a prototipos es una forma de programación orientada a objetos sin clases, basada en el concepto de prototipo. Un prototipo es un objeto a partir del cual se crean nuevos objetos. En el lenguaje de programación orientado a auto prototipos , las propiedades de un objeto, ya sea que se refieran a atributos o métodos, se denominan ranuras ; no existe la misma distinción entre ranuras de datos y ranuras de código que tenemos con las clases. La gran diferencia con la programación de objeto a clase es que puede reemplazar el contenido de las ranuras, agregar más o cambiar la jerarquía de herencia , ya sea que se proporcione en el objeto original o no.
El yo fue el primer lenguaje prototipo. Fue diseñado en Sun Labs en la década de 1990 . El más conocido actualmente es JavaScript .
Objetos de clase:
Objetos prototipo:
Uno de los principales intereses de los prototipos es la herencia dinámica: cualquier objeto puede cambiar de padre en tiempo de ejecución, en cualquier momento.
Podemos materializar el objeto en prototipos y objetar paradigmas de clases notando la diferencia en el uso de la memoria.
Actualmente existen varios lenguajes basados en objetos prototipo: Self , Lisaac o lenguajes que implementan la especificación ECMAScript ( JavaScript , ActionScript , JScript ). Self y JavaScript son lenguajes de escritura dinámica y se interpretan. Lisaac y ActionScript se escriben y compilan estáticamente . En ActionScript 3.0, la herencia de prototipos no es el mecanismo principal para la herencia, ya que esta función también recae en la herencia de clases, ahora presente en esta versión.
Las propiedades de los objetos se buscan en la cadena de herencia de la misma forma que el valor de las variables en la pila de contextos de ejecución.
El escrito se foo.barinterpreta de la siguiente manera:
No es una copia estática de la variable; cada vez que el compilador (intérprete) encuentra el identificador, lo interpreta como se indica.
Dado que una propiedad declarada en el objeto se encuentra primero, oculta aquellas con el mismo nombre que podrían haber existido en los prototipos que hereda el objeto. Por ejemplo, el prototipo de objeto Objecttiene un método toStringque devuelve una descripción del objeto, para cualquier tipo de objeto. Los objetos construidos por Date()heredan el prototipo de esta función, incluido un método toStringque devuelve información más útil; esto oculta el método toStringde Object.prototype.
Un objeto hereda el prototipo de su constructor. Si no usa un constructor para inicializar un objeto, puede usar una función vacía para crear este enlace.
var A = {}; // identique à « var A = new Object(); » var B = (function () { function F() {} F.prototype = A; return new F(); }()); // depuis JavaScript 1.8.5 la méthode « Object.create(A); » a le même effet // à présent A est dans la chaîne de recherche d'identifiants de B A.compte = 0; A.separ = ": "; B.separ = ", "; for (A.compte = 0; A.compte < 10; A.compte++) { document.write(B.compte + B.separ) // 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, }Este ejemplo muestra la herencia de una propiedad que devuelve un valor de tipo número; heredar referencias a un objeto, incluido un método, se realiza de la misma manera.