Extender métodos no javascript é muito fácil e muito útil para coisas que são corriqueiras. Exemplo: métodos trim, capitalize, bold, reverse e métodos que podem ser especificos de uma classe Utils.js dentro do seu projeto
Por exemplo, se a gente fosse fazer uma extensão para deixar uma string sempre com a primeira letra em maiuscula.
var string = "yes";
if(!String.prototype.capitalize)
{
String.prototype.capitalize = function()
{
return this.slice(0,1).toUpperCase() + this.slice(1).toLowerCase();
}
}
Tranquilo né! Só que temos uma inconveniente nesse código.
for(i in string) console.log(i + ":" + string[i]);
Resultado:
1) y
2) e
3) s
4) function ....
Nesse caso, imagina que você tenha que fazer um for, teria que ficar validando se é realmente string ou function, estranho né!
A solução: Vamos usar o Object.defineProperty
Ele incrementa ou altera um método ao objeto passado. Mais detalhes - https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/defineProperty
if(!String.prototype.capitalize)
{
Object.defineProperty(String.prototype, 'capitalize',
{
value: function()
{
return this.slice(0,1).toUpperCase() + this.slice(1).toLowerCase();
},
enumerable: false
});
}
alert(string.capitalize());
for(i in string) console.log(i + ":" + string[i]);
Resultado:
1) y
2) e
3) s
Espero que sirva!