Red de conocimiento informático - Problemas con los teléfonos móviles - El significado de prototipo

El significado de prototipo

Sabemos que en JScript, la propiedad prototipo de un objeto se utiliza para devolver una referencia prototipo del tipo de objeto. Usamos la propiedad prototipo para proporcionar un conjunto básico de funcionalidades para una clase de objeto. Las nuevas instancias de un objeto "heredan" las operaciones del prototipo del objeto. Pero, ¿cómo se implementa y gestiona exactamente este prototipo?

El manual de JScript describe la propiedad prototipo de los objetos de la siguiente manera: Todos los objetos internos de JScript tienen una propiedad prototipo de solo lectura. Puede agregar dinámicamente funcionalidad (propiedades y métodos) al prototipo de un objeto, pero no puede darle al objeto un prototipo diferente. Sin embargo, a los objetos definidos por el usuario se les puede asignar un nuevo prototipo.

Veamos tres ejemplos clásicos del uso de propiedades de prototipo.

1. Agregue métodos a los objetos integrados en el entorno de script:

Código de programa

Array.prototype.max = function()

{

var i, max = this[0];

for (i = 1; i lt; this.length; i)

{

if (max lt; this[i])

max = this[i];

}

return max;

};

2.ShowName = función()

{

alerta(this.m_Name);

};< / p>

3. Actualice el prototipo de la clase personalizada:

Código de programa

función TestObjectA()

{

this.función()

{

alert('TestObjectA. MethodA()');

4.MethodA()');

}

}

función TestObjectB()

{

this.MethodB = función()

{

alert('TestObjectB.MethodB()');

}

}

TestObjectB.prototype = nuevo TestObjectA ();

¿Te resulta familiar el tercero? Sí, este es el método de herencia prototípico que presentamos antes ~~ Pero lo que vamos a discutir hoy no es "herencia". La razón por la que podemos implementar una herencia de esta manera es solo para aprovechar un efecto secundario del prototipo. propiedades.

Prototype también tiene un atributo predeterminado: constructor, que se utiliza para representar la función que crea el objeto (lo llamamos constructor en programación orientada a objetos). Incluyen todos los objetos internos de JScript excepto los objetos globales y matemáticos. El atributo constructor contiene una referencia a una función que construye una instancia de objeto específica.

Ahora que entendemos cómo se utiliza la propiedad prototipo en JScript, profundicemos en ella.

En el artículo anterior, enumeré los diversos usos de los atributos del prototipo en JScript, pero el prototipo no es creado por JScript, en realidad utiliza una forma derivada de nuestro patrón de diseño: el modo Prototipo. Comenzaré con una breve introducción al patrón de prototipo y luego veré qué sucede con los prototipos en JScript.

¿Qué es el patrón prototipo?

Especifica el tipo de objeto creado utilizando una instancia de prototipo y crea nuevos objetos copiando el prototipo.

El patrón prototipo permite que un objeto cree otro objeto personalizable sin conocer ningún detalle de su proceso de creación. Funciona pasando un objeto prototipo al objeto que iniciará la creación y al objeto que iniciará la creación. La creación será El objeto creado realiza la creación solicitando al objeto prototipo que se copie a sí mismo.

Para seguir entendiendo qué es el patrón de prototipo, puedes consultar el artículo "Patrones de diseño de prototipos". No importa si no sabes Java, solo mira el código como C#. .

¿Has descubierto qué es un prototipo? En cualquier caso, recuerde que la implementación del modo prototipo depende de las operaciones de clonación. Por supuesto, permitir la copia o la clonación profunda depende de sus propias necesidades.

Sigamos hablando del prototipo en JScript. ¿Por qué decimos que es diferente del prototipo en modo prototipo? Esta no es sólo mi charla, ni es una jactancia. Echa un vistazo a este ejemplo y probablemente podrás entenderlo:

Código de programa

lt; ="javascript" gt;

función RP()

{

RP.PropertyA = 1;

RP.PropertiesA = 1 ;

función RP()

{

RP.PropertyA = 1

RP.PropertyA = 10;

RP .prototype.MethodA = function()

{

alert("RP.prototype.MethodA;

RP.MethodA();

Eliminar rp.p>lt;/scriptgt;

lt;/bodygt;

lt;/htmlgt;