Aplicações de Objetos ECMAScript
- Página anterior Orientação a objetos
- Próxima página Tipos de objetos
A criação e destruição de objetos ocorrem durante a execução do JavaScript, entender o significado dessa paradigm é crucial para entender todo o idioma.
Declaração e instância
A criação de objetos é feita usando a palavra-chave new seguida pelo nome da classe a ser instanciada:
var oObject = new Object(); var oStringObject = new String();
A primeira linha de código cria uma instância da classe Object e a armazena na variável oObject. A segunda linha de código cria uma instância da classe String e a armazena na variável oStringObject. Se o construtor não tiver parâmetros, os parênteses não são necessários. Portanto, os dois primeiros linhas de código podem ser rewritten da seguinte forma:
var oObject = new Object; var oStringObject = new String;
Referência de objeto
No capítulo anterior, introduzimosConceito de tipo de referênciaEm ECMAScript, não é possível acessar a representação física de um objeto, apenas a referência ao objeto. Cada vez que um objeto é criado, o que é armazenado na variável é a referência ao objeto, e não o objeto em si.
Desreferenciamento de objetos
O ECMAScript possui uma rotina de coleta de lixo (garbage collection routine), o que significa que não é necessário destruir explicitamente os objetos para liberar memória. Quando não há mais referências para um objeto, dizemos que o objeto foi desreferenciado. Quando a rotina de coleta de lixo é executada, todos os objetos desreferenciados são destruídos. A cada vez que uma função termina a execução de seu código, a rotina de coleta de lixo é executada, liberando todas as variáveis locais, e também em outras situações não previstas, a rotina de coleta de lixo também é executada.
Definir todas as referências do objeto como null pode forçar a eliminação do objeto. Por exemplo:
var oObject = new Object; // aqui faça algo com o objeto oObject = null;
Quando a variável oObject é definida como null, a referência ao primeiro objeto criado não existe mais. Isso significa que, na próxima execução da coleta de unidades de armazenamento inúteis, o objeto será destruído.
Depois de usar um objeto, é uma boa prática eliminá-lo para liberar memória. Isso também garante que não se use mais objetos que não podem ser acessados, prevenindo assim erros de design do programa. Além disso, antigos navegadores (como IE/MAC) não têm uma coleta de unidades de armazenamento inúteis completa, então ao descarregar a página, os objetos podem não ser destruídos corretamente. Eliminar o objeto e todas suas características é a melhor maneira de garantir o uso correto da memória.
Atenção:Cuidado ao eliminar todas as referências do objeto. Se um objeto tiver duas ou mais referências, para eliminar corretamente o objeto, todas as suas referências devem ser definidas como null.
Vínculo antecipado e tardio
O que se entende por vínculo é o método de combinar a interface do objeto com a instância do objeto.
O vínculo antecipado (early binding) se refere à definição das propriedades e métodos do objeto antes da instânciação do objeto, permitindo que o compilador ou interpretador convertam antecipadamente o código para máquina. Em linguagens como Java e Visual Basic, com o vínculo antecipado, é possível usar o IntelliSense (ou seja, fornecer a lista de atributos e métodos do objeto ao desenvolvedor) no ambiente de desenvolvimento. ECMAScript não é uma linguagem de tipo forte, portanto, não suporta o vínculo antecipado.
Por outro lado, o vínculo tardio (late binding) se refere ao compilador ou interpretador que, antes da execução, não sabe o tipo do objeto. Com o vínculo tardio, não é necessário verificar o tipo do objeto, basta verificar se o objeto suporta atributos e métodos. Todas as variáveis do ECMAScript utilizam o método de vínculo tardio. Isso permite a execução de uma grande quantidade de operações de objetos, sem qualquer penalidade.
- Página anterior Orientação a objetos
- Próxima página Tipos de objetos