domingo, maio 28, 2006

Objetos em Javascript

Javascript fornece mecanismos básicos para criação de objetos. Digo básico porque os objetos em Javascript podem ser encaradas como estruturas de dados "anabolizadas": apenas variáveis e funções para mexer nestas variáveis. A linguagem não permite mecanismos mais complexos de orientação a objetos, como criar restrições de acesso (variáveis e métodos públicos e privados), polimorfismo, herança (até encontrei alguns exemplos de mecanismos de simulação de herança, mas que me parecem muito exagerados) e construtores múltiplos. Mas se levarmos em conta que o objetivo de Javascript é tornar as páginas HTML mais dinâmicas adicionando pequenos programinhas client-side, então podemos concluir que os mecanismos de OO oferecidos são mais do que suficientes. Segue abaixo um código simples, de um objeto que simula o comportamento de um StringBuffer em Javascript (cujas vantagens foram discutidas neste post):
function StringBuffer() {
this.buffer = [];
};

StringBuffer.prototype.append = function append(string) {
 this.buffer.push(string);
return this;
};

StringBuffer.prototype.toString
= function toString() {
return this.buffer.join("");
};

O código acima cria um objeto do tipo StringBuffer, com um construtor vazio e com um atributo buffer. Depois cria 2 métodos: append e toString. Dois pontos são interessantes no código acima:
  1. Um objeto em Javascript é no fundo uma função, e o construtor é a lista de parâmetros desta função.
  2. O objeto prototype, interno a qualquer objeto Javascript, permite que se adicione métodos e atributos em runtime em qualquer objeto Javascript, incluindo objetos da biblioteca padão.
Uma outra forma de escrever o objeto acima seria com a seguinte sintaxe:
function StringBuffer() {
this.buffer = [];

append = function append(string) {
    this.buffer.push(string);
    return this;
};

toString = function toString() {
    return this.buffer.join("");
};
}

Qualquer instrução que estiver fora de alguma função interna será executada automaticamente quando se criar um novo objeto do tipo StringBuffer, sendo portanto o equivalente à um construtor. Minha opinião: o uso de objetos em JS é altamente recomendado para suprir a falta de estruturas de dados mais sofisticadas e para organizar certas partes do código

0 Comments:

Postar um comentário

Links to this post:

Criar um link

<< Home