En este post se explica cuál es la función de la palabra reservada prototype
en el lenguaje de programación JavaScript. También se describe cuándo es recomendable su uso, ventajas, desventajas y ejemplos del mismo.
Es una propiedad que tienen todos los objetos de JavaScript, el cual representa el prototipo de cada objeto.
Gracias a prototype, se pueden modificar los objetos o agregar algún polyfill.
Cuando se agrega un método al objeto, a través de prototype, todos los demás objetos lo heredan al instante.
Si el objeto no es del programador, nunca. Es decir, no es recomendable modificar a Array
, Object
, String
, etcétera; pues son objetos que son globales y a su vez especiales. Nunca se deben modificar , si no es estrictamente necesario.
En cambio, si son objetos propios (o clases), no hay ningún problema.
Es útil usar prototype
cuando se programa un polyfill. Por ejemplo, vamos a suponer que se desea agregar el método forEach
de los arreglos en caso de que el mismo no exista.
Si el método ya existe, no se hace nada; en caso de que no, se define. Todo esto permitirá que se pueda usar a forEach
en los arreglos, sin importar el navegador o versión de JavaScript.
El código, en el cual se usa prototype, podría quedar así:
if(!Array.prototype.forEach){
Array.prototype.forEach = function(){
// this es el arreglo
//TODO: implementar magia aquí
}
}
De esta manera, si el método existe, todo seguirá normal. Si no, entonces se implementa el código de forEach
. Así es como funcionan los polyfill; pero antes de modificar se comprueba si el método no existe.
Por otro lado, prototype es de gran ayuda al definir clases. No recuerdo en qué versión de JS se hace así, pero había una forma como la siguiente:
var Mascota = function(nombre, edad){
this.nombre = nombre;
this.edad = edad;
}
// Ahora usamos prototype
Mascota.prototype.ladrar = function(){
console.log("Woof! Me llamo " + this.nombre);
}
De esta manera se agregan métodos a los objetos, que más tarde pueden ser creados con:
var m = new Mascota("Maggie", 3);
Como lo dije, no se debe usar a prototype cuando se desee o cuando se piense que esa es la solución a algo. Sin embargo, si se desea jugar un poco o probar lo que este maravilloso lenguaje permite, es válido.
Se tienen a las cadenas; las mismas tienen algunos métodos como toLowerCase
. Se puede implementar el método invertir
, el cual regresaría una cadena nueva, pero invertida.
El código quedaría así:
/*
Jugar con los prototipos de JS
@author parzibyte
*/String.prototype.invertir = function () {
return this.split("").reverse().join("");
}
let cadena = "Hola desde parzibyte.me";
console.log("La cadena es: ", cadena);
console.log("Al invertirla, es: ", cadena.invertir());
Un método repetido y visto miles de veces; pero eso que se acaba de hacer permite lo siguiente:
"Hola".invertir();
Sin importar cuál cadena sea (siempre y cuando sea una cadena); al llamar a este método se devuelve una nueva cadena pero invertida.
Cuando normalmente, el método se llamaría así:
invertir("Cadena");
Aunque puede parecer divertido o útil, se desaconseja esto. Sobre todo porque a veces cuando se recorre con for(var propiedad in objeto)
y no se comprueba con hasOwnProperty
, hay resultados inesperados.
En resumen, prototype ayuda a definir más métodos de un objeto, o a sobrescribir (a veces) a los mismos. Esto no es recomendable de ninguna manera, y si se desea agregar un método, se debe comprobar primero si el mismo no existe.
Si se desea una definición más formal de prototype en JavaScript, aquí está este link de MDN.
El día de hoy te mostraré cómo crear un servidor HTTP (servidor web) en Android…
En este post te voy a enseñar a designar una carpeta para imprimir todos los…
En este artículo te voy a enseñar la guía para imprimir en una impresora térmica…
Hoy te voy a mostrar un ejemplo de programación para agregar un módulo de tasa…
Los usuarios del plugin para impresoras térmicas pueden contratar licencias, y en ocasiones me han…
Hoy voy a enseñarte cómo imprimir el € en una impresora térmica. Vamos a ver…
Esta web usa cookies.