Uma capacidade muito explorada no javascript é a possibilidade de se adicionar propriedades a objetos em tempo de execução. Como javascript é uma linguagem interpretada, o desenvolvedor tem a possibilidade de adicionar propriedades (variáveis, funções, etc…) a objetos já instanciados.
Para isso, é usado o objeto prototype que todos objetos do javascript possuem.
Abaixo segue uma função que facilita a escrita; ao invés de criar para cada função a ser adicionada no objeto uma entrada diferente, com ela só é necessário passar como parâmetro o objeto e uma lista de propriedades.
/* função recebe dois parâmetros: o objeto e a lista de métodos que serão adicionados a ele */
function addMethods(myObject, methods) {
//percorre a lista de métodos
for (var property in methods) {
//adiciona o método ao objeto, dinamicamente
myObject.prototype[property] = methods[property];
}
}
Para facilitar, segue um código completo onde no onload da página adiciono ao objeto String (nativo do javascript) duas funções e uma variável:
<html>
<head>
<title>Adicionar metodos</title>
<script type="text/javascript">
/* função recebe dois parâmetros: o objeto e a lista de métodos que serão adicionados a ele */
function addMethods(myObject, methods) {
//percorre a lista de métodos
for (var property in methods) {
//adiciona o método ao objeto, dinamicamente
myObject.prototype[property] = methods[property];
}
}
window.onload = function() {
addMethods(String, {
func1: function() {alert("Sou a funcao 1");},
func2: function() {alert("Sou a funcao 2");},
const1: 2
});
var myString = new String();
myString.func1();
alert(myString.const1);
}
</script>
</head>
<body>
</body>
</html>