Adicionando propriedades a objetos no Javascript em tempo de execução

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>

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *