Añade de forma sencilla funciones a los prototipos

Prototyping prototipe en javascriptEn muchas ocasiones me he visto añadiendo funciones a los prototipos. Funciones que uso en multitud de proyectos y que yo mismo me he preguntado porque no están ya implementadas en el propio núcleo de javascript?

La forma tradicional de hacerlo, hace que en ocasiones, sea demasiado largo e incluso en ocasiones poco minificable.

He construido una pequeña función que ayuda de una manera sustancial al asunto.

Trabajando con prototipos

Veamos primero la forma tradicional de trabajar con prototipos (prototypes) en Javascript:

String.prototype.toDouble = function(){
    return parseDouble(this);
};

Con esto añadiríamos una función al prototipo String, con lo que todos los Strings de nuestro código pasarían a tener la función toDouble.

Si ahora queremos añadir otra función a los Strings, de nuevo añadiremos…

String.prototype.isEmail = function(){
    return this.test(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
};

Y así sucesivamente. Está bien, pero sería mejor disponer de una función que permita añadir funciones a los prototipos de una forma rápida, sencilla, reutilizable y que además nos sirva para código propio.

Añadiendo funciones a los prototipos en Javascript

Aquí es donde entra en el juego de los prototipos la siguiente función:

Function.prototype.implement = function(name, action){
    // Si recibimos un string es que solo estamos añadiendo una función
    if(typeof name === 'string'){
        this.prototype[name] = action;
        return this;
    }

    // Si recibimos un array, lo recorremos y añadimos los valores
    var item;
    for(item in name){
        if(name.hasOwnProperty(item)){
            this.prototype[item] = name[item];
        }
    }

    return this;
};

Al “prototype” de “Function” le añadimos una función llamada “implement” que se encargará de añadir las funciones a los prototipos de cada función.

Así podremos usar nuestro código de la siguiente manera, por ejemplo en el caso anterior nos quedaría una cosa similar a esto:

String.implement({
    toDouble: function(){
        return parseDouble(this);
    },

    isEmail: function(){
        return this.match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})+$/);
    }
});

Una forma sencilla de añadir funciones a los objetos nativos de javascript y que nos serviría incluso para los nuestros propios.

Corre la voz!

Comentarios


Escribir un comentario

Escribe lo que desees, si quieres incluir código hazlo usando los tags <pre>

Nombre:
Email:
Website: