Visit Mozilla.org

Referencia de JavaScript 1.5:Objetos globales:Function:prototype

De MDC


[editar] Resumen

Un valor desde cuyas instancias de una clase particular son creados. Cada objeto que puede ser creado por la invocación a la función constructora posee una propiedad prototype asociada.

Propiedad de Function
Implementado en: JavaScript 1.1, NES 2.0
ECMA Version: ECMA-262

[editar] Descripción

Puede añadir propiedades o métodos a una clase existente mediante la adición de ellos al prototipo asociado con la función constructora para esa clase. El sintaxis para añadir una nueva propiedad o método es:

función.prototype.nombre = valor

donde

función
El nombre de la función constructora del objeto que desea cambiar.
nombre 
El nombre de la propiedad o método ha ser creado.
valor 
El valor inicialmente asignado a la nueva propiedad o método.

Si añade una propiedad al prototipo para un objeto, luego todos los objetos creados con la función constructora del objeto tendrán la nueva propiedad, aún si el objeto existió antes de creada la nueva propiedad. Por ejemplo, asúmase que posee las siguientes sentencias:

var arreglo1 = new Array();
var arreglo2 = new Array(3);
Arreglo.prototype.descripción=null;
arreglo1.descripción="Contiene alguna materia"
arreglo2.descripción="Contiene otra materia"

Después de configurar una propiedad para un prototipo, todos los objetos subsecuentes creado con Array poseerán esta propiedad:

otroArregloheredado=new Array()
otroArregloheredado.descripción="Actualmente vacío"

Nótese que prototype es en sí mismo un objeto y puede ser asignado propiedades y métodos vía la sintaxis de objetos literales:

function MiFunción() {
   alert("Creado.");
}

MiFunción.prototype = {
   alerta1: function(cadena) {
      alert(cadena);
   },

   cinco: 5,

   alerta2: function() {
      alert("Hola.");
   }
};
var miObjeto = new MiFunción();
miObjeto.alerta1("Allá.");
miObjeto.cinco;
miObjeto.alerta2();

[editar] Ejemplo

El siguiente ejemplo crea un método cadena_rep y utiliza la sentencia String.prototype.rep = cadena_rep para añadir el método a todos los objetos String. Todos los objetos creados con new String() tendrán entonces este método, aún aquellos objetos que hayan sido creados hasta ahora. El ejemplo entonces crea un método alternativo para añadir a uno de los String objetos utilizando la sentencia s1.rep = fake_rep. El método str_rep de los restantes objetos String no son alterados.

var s1 = new String("a")
var s2 = new String("b")
var s3 = new String("c")

// Crea un método de repetición de cadenas N veces para todos las funciones de los objetos String str_rep(n) {
   var s = "", t = this.toString()
   while (--n >= 0) s += t
   return s
}

String.prototype.rep = str_rep

s1a=s1.rep(3) // retorna "aaa"
s2a=s2.rep(5) // retorna "bbbbb"
s3a=s3.rep(2) // retorna "cc"

// Crea un método alternativo y le asigna solamente una variable String
function fake_rep(n) {
   return "repite " + this + " " + n + " veces."
}

s1.rep = fake_rep
s1b=s1.rep(1) // retorna "repite a 1 veces."
s2b=s2.rep(4) // retorna "bbbb"
s3b=s3.rep(6) // retorna "cccccc"

La función en el ejemplo trabaja también sobre objetos String objects not created with the String constructor. The following code returns "zzz".

"z".rep(3)