Javascript e Prototype JS
Overview
Javascript essencial
Prototype JS - Overview
Javascript

Não é um subconjunto de Java: ECMAScript (ECMA-262)

Interpretada

Sintaxe da família C/C++/Java, case-sensitive

Tipagem fraca

Recursos para orientação a objetos prototipada

Mais comumente utilizada em navegadores web
Prototype JS - Overview
Javascript
Tipos de dados
Prototype JS - Overview
Javascript
Tipos de dados
Tipos primitivos (primitive types)
var nEx; nEx = 3.8;
nEx = 048;

Numérico
String
var sEx; sEx = “palavra”;
sEx = 'palavra';

Booleano
var bEx; bEx = true;
bEx = false;

nEx = 0xFF3;
Tipos de referência (reference types)


Objeto
var oEx; oEx = new Object();
new Date();

Array
var aEx; aEx = [1, 0, 1];
aEx = [“alfa”, “beta”];

Função
function obterUsuarios() { }
Variáveis não inicializadas têm o valor undefined
Prototype JS - Overview
Javascript
Array
var aEx = [];
var aEx = new Array();



Coleção ordenada de valores que podem ser acessados
por seu índice
Cada valor contido no array é chamado de elemento
Um elemento pode ser de qualquer tipo: string, numérico,
objeto, etc. Pode ser até mesmo outro array
Prototype JS - Overview
Javascript
Função
function nome([arg1 [,arg2 [..., argn]]])
{
//código
}

Pode ter 0 ou mais parâmetros

Os parâmetros são opcionais

Pode ser manipulada como dado
Prototype JS - Overview
Javascript
Valor X referência
Prototype JS - Overview
Javascript
Manipulação de dados por valor
var iNumA, iNumB;
7
7
iNumA = 7;
iNumA
iNumB
iNumB = iNumA;
----------------------------------------------------------------------------------------------iNumA = 9;
9
7
iNumA
iNumB
Manipulação de dados por referência
Memória
var aMAluno1, aMAluno2;
0x01CF
aMAluno1 = [2, 3.2, 8];
aMAluno2 = aMAluno1;
2
0x01CF
0x01CF
aMAluno1
aMAluno2
3.2
8
------------------------------------------------------------------------------------------------------aMAluno1[0] = 5;
0x01CF
5
0x01CF
0x01CF
aMAluno1
aMAluno2
3.2
8
Prototype JS - Overview
Javascript
Operadores
Prototype JS - Overview
Javascript
Principais operadores
Aritméticos
Binários - Adição, subtração, multiplicação e divisão:
+ - * /
Unários - Mais, menos, módulo, incremento, decremento e atribuição: + - % ++ -- =
------------------------------------------------------------------------------------------------------------------------iMedia = (iNota1 + iNota2) / 2;
iSemestre++;
if (bVozFina == true) iNota1 -= 5;
//Perde cinco pontos caso tenha a voz fina
Relacionais e lógicos
“E” lógico, “OU” lógico, “NÃO” lógico:
&&
||
!
Maior, menor, igual e diferente:
> < == !=
------------------------------------------------------------------------------------------------------------------------if (iNota > 7) ...
if (iNota > 7 && iMedia > 4) ...
if (iSemestre != 2 || bMateriaOpcional == true) ...
Prototype JS - Overview
Javascript
Controle de fluxo
Prototype JS - Overview
Javascript
Controle de fluxo do programa
Laços (loops)
Decisão
IF/ELSE
FOR / FOR..IN
if (expressão)
sentença;
else [(expressão)]
sentença;
for (inicialização; teste; incremento)
sentença;
SWITCH
WHILE / DO WHILE
switch (expressão)
{
case valor:
sentença;
...
break;
...
[default:
sentença;
...
break;]
}
while (expressão)
sentença;
for (variável in objeto)
sentença;
do
sentença;
while (expressão);
Orientação a objetos,
JSON e
Client-side JS
Prototype JS - Overview
Javascript
Orientação a objetos e JSON
Prototype JS - Overview
Javascript
Objeto
var oAdv; //Advogado
oAdv =
{
nome: 'Luiz Pareto',
endereco: 'Assembleia, 10',
vozFina: true,
reclamarDeUmTelefone: reclamarTel;
};
//ver função reclamarTel
oAdv.reclamarDeUmTelefone();
if (oAdv.vozFina == true) alert('Você é meio viado?');

Coleção de propriedades e métodos que pode ser manipulada
individualmente como um dado qualquer

Métodos são funções invocadas a partir de propriedades

JSON: Javascript Object Notation - { , : [
Prototype JS - Overview
Javascript
Construtores
function Advogado(psNome, psEnd, pbVozF)
{
//psNome
//Nome do advogado
//psEnd
//Endereço do advogado
//pbVozF
//Booleano que indica se ele tem voz fina
this.nome = psNome;
this.endereco = psEnd;
this.vozFina = pbVozF;
this.reclamarDeUmTelefone = reclamarTel;
}
var oAdv = new Advogado('Luiz Pareto', 'Assembleia, 10', true);
if (oAdv.vozFina == true) alert('Você é meio viado?');

Mesmo objetos de tipos 'pré-definidos' podem ser definidos por seus construtores
var aMAluno1 = new Array(8, 7.2, 3);
Prototype JS - Overview
Javascript
Protótipo


Em Javascript, todo objeto possui a propriedade
prototype, que é uma referência para um outro objeto, de
caráter especial
Todas as propriedades do protótipo aparecem como
propriedades do objeto que o contém (simulação de
herança)
function Advogado(psNome, psEnd, pbVozF)
{
...
}
Advogado.prototype.reclamarDeUmTelefone = reclamarTel;
var oAdv = new Advogado('Luiz Pareto', 'Assembleia, 10', true);
if (oAdv.vozFina == true) alert('Você é meio viado?');
Prototype JS - Overview
Javascript
Protótipo
Construtor Advogado
(function Advogado(...))
Método 'reclamarDeUmTelefone'
(function reclamarTel())
Protótipo
oAdv
oAdv2
oAdv3
oAdv.reclamarDeUmTelefone();
oAdv2.reclamarDeUmTelefone();
oAdv3.reclamarDeUmTelefone();
Prototype JS - Overview
Javascript
Simulando classes - encapsulamento
function Advogado(psNome, psEnd, pbVozF)
{
this.nome = psNome;
//propriedade pública
}
Advogado.prototype.reclamarDeUmTelefone = reclamarTel; //método público
function Advogado(psNome, psEnd, pbVozF)
{
var nome = psNome;
//propriedade privada
function reclamarDeUmTelefone()
{
}
}
//método privado
function Advogado(psNome, psEnd, pbVozF)
{
this.reclamarDeUmTelefone = reclamarTel;
}
//método privilegiado
Prototype JS - Overview
Javascript
Outros pontos importantes
Prototype JS - Overview
Javascript
Funções anônimas


Javascript, assim como algumas outras linguagens, permite o uso de
funções anônimas, ou lambda functions
As funções anônimas são trechos de código que podem receber
parâmetros e retornar resultados, exatamente como funções comuns,
mas não têm um nome pelo qual podem ser referenciadas. Por isso,
devem ser imediatamente atribuídas a alguma variável de referência para
poderem ser utilizadas
function Advogado(psNome, psEnd, pbVozF)
{
this.reclamarDeUmTelefone = function () { alert(‘Não fala nem recebe chamada.’); };
}
function Advogado(psNome, psEnd, pbVozF)
{
this.reclamarDeUmTelefone = function ()
{
alert(‘Não fala nem recebe chamada.’);
};
}
Prototype JS - Overview
Javascript
Wrappers para tipos primitivos


Em Javascript, todos os tipos primitivos possuem classes
correspondentes: Number, String e Boolean
Como o Javascript converte facilmente dados de um tipo para outro, é
possível utilizar dados de tipos primitivos como objetos. Nesse caso, o
interpretador automaticamente cria um Wrapper da classe
correspondente
var sNm;
//nome do usuário
sNm = 'Roberval';
//tipo primitivo string
alert(sNm.toLowerCase());
//método toLowerCase, do objeto String (wrapper)
alert(typeof sNm);
//exibirá 'string' e não 'object'
Prototype JS - Overview
Javascript
As classes Date, Math e RegExp

Javascript possui algumas classes auxiliares pré-definidas

Date, como o nome indica, fornece recursos para a manipulação de datas e hora


Math, como o nome indica, fornece recursos para a manipulação de números e
cálculos matemáticos em geral
A classe RegExp fornece recursos para o uso de expressões regulares, padrões
de pesquisa textual extremamente poderosos
var oDtN;
//data de nascimento
var oREAlfa; //expressão regular para manipulação de caracteres alfabéticos
oDtN = new Date(2006, 1, 20);
alert(new Date().getMonth());
//data de 20/01/2006
//mês atual
oREAlfa = new RegExp('[a-zA-Z]*');
oREAlfa = /[a-zA-Z]*/;
//expressão regular definida pelo construtor
//expressão regular definida com um literal
alert(Math.round(2.3));
alert(Math.sqrt(4));
//arredondamento de 2.3 para número inteiro
//raiz quadrada de 4
Prototype JS - Overview
Javascript
Coleta de lixo




Em qualquer linguagem, variáveis de tipos cujo tamanho é desconhecido
a princípio são alocadas na memória em tempo de execução (variáveis
de alocação dinâmica), quando o compilador/interpretador conhece o
tamanho necessário
Em Javascript, tipos de referência, como arrays, objetos e funções, e
outros dados sem tamanho pré-definido, como strings, são alocados
na memória dinamicamente, à medida que são manipulados
Para evitar os estouros de memória, é preciso liberar a memória alocada
quando ela já não é necessária. Linguagens como C e C++ exigem que o
próprio programador libere a memória. Javascript, assim como Java ou
C#, utiliza coleta de lixo (garbage collection)
O interpretador Javascript, ao detectar que uma variável não pode mais
ser referenciada, libera imediatamente a memória ocupada, destruindo
assim a referência inútil e permitindo que outros trechos de código
executável ocupem aquela memória
Prototype JS - Overview
Javascript
Coleta de lixo
var sNm;
var sNmMin;
//nome do usuário
//nome do usuário em minúsculas
sNm = 'Khaled Mahmoud';
sNmMin = sNm.toLowerCase();
//memória alocada para uma string
//uma nova string é alocada: 'khaled mahmoud'
sNm = sNmMin;
//a referência para 'Khaled Mahmoud' não existe mais
Memória
0x03AD
Khaled Mahmoud
sNm
Memória
Memória
0x03AD
Khaled Mahmoud
0x03B5
khaled mahmoud
0x03AD
Khaled Mahmoud
0x03B5
khaled mahmoud
sNm
sNmMin
sNm
sNmMin
Prototype JS - Overview
Javascript
Tratamento de exceções



Exceções são ocorrências especiais que inesperadamente desviam o fluxo normal de
execução de um programa
Em geral, são erros que impedem a continuidade da lógica do programa ou eventos
especiais de hardware que interrompem a execução do programa, mas também podem
ser lançados pelo próprio programador para indicar uma condição específica
Em Javascript, assim como em Java e C#, o mecanismo de tratamento de exceções é o
bloco try/catch/finally
Bloco try/catch/finally
TRY / CATCH / FINALLY
try
{
sentença;
}
catch (oE)
{
sentença;
}
finally
{
sentença;
}
Prototype JS - Overview
Javascript
Client-side Javascript
O objeto window, o DOM e a programação orientada a eventos
Prototype JS - Overview
Javascript
O objeto window





A função primária de um browser é exibir documentos HTML
Quando um documento é carregado com código Javascript, o interpretador Javascript cria
uma infra-estrutura para manipulação da janela (ou frame) e do documento carregado:
os objetos window e document
O objeto window tem a função especial de ser o objeto global da implementação
javascript. Ele suporta toda a estrutura do código criado, enquanto o script permanecer
em execução.
Variáveis globais são, na verdade, propriedades do objeto global window. Funções
são, na verdade, métodos do objeto global window. As variáveis globais window e self
são propriedades auto-referenciais do objeto global.
Cada janela é um contexto de execução independente, mas o código Javascript que
roda em uma janela pode acessar o código de outras, respeitando restrições de
segurança
var giValor;
//variável global para armazenar o valor de uma mercadoria
giValor = 10;
//inicialização da variável
alert(window.giValor);
//exibirá '10'
Prototype JS - Overview
Javascript
O DOM e a hierarquia client-side
navigator
frames[ ]
location
window
(global object)
DOM - Document Object Model
history
forms[ ]
document
elements[ ]
images[ ]
screen
self, window,
parent, top
(inputs, selects,
textareas, ...)
Prototype JS - Overview
Javascript
O DOM e a hierarquia client-side





O objeto window é o principal objeto no client-side Javascript. Todos os outros
objetos são acessados através dele
Quando o documento HTML possui frames, por exemplo, o interpretador
Javascript cria, dentro do objeto window, um array chamado frames, através do
qual se podem manipular todos os frames contidos na janela principal
Da mesma forma, o objeto document (que representa o documento HTML
carregado) possui a propriedade forms, que é um array de referências para
todos os formulários existentes no documento
Essa estrutura de objetos pertencentes ao objeto document ficou conhecida
como DOM (Document Object Model, ou Modelo do Objeto Documento).
O DOM permite manipular todo o documento HTML, representando a
estrutura do documento como uma árvore. Foi criado na primeira
implementação da linguagem Javascript, em 1996, no Netscape Navigator. Aos
poucos, diferenças foram surgindo nos outros browsers, como o Internet
Explorer, o que levou aos atuais esforços de padronização por parte do W3C,
que resultaram no W3C DOM.
Prototype JS - Overview
Javascript
O DOM e a hierarquia client-side
<div id="exemplo">
Esse é um <h3>exemplo de HTML</h3> <br /> sobre DOM
</div>
DIV
attributes
childNodes
id = “exemplo”
“Esse é um”
H3
childNodes
“exemplo de HTML”
BR
“sobre DOM”
Prototype JS - Overview
Javascript
A programação orientada a eventos





Programas de computador, por muito tempo, eram executados apenas em
modo batch. Liam um conjunto de dados, executavam instruções sobre eles e
retornavam resultados.
Com as interfaces gráficas e dispositivos apontadores, surge a orientação a
eventos: o software responde aos movimentos do mouse ou aos
pressionamentos de tecla, ao carregamento de outros trechos de código, etc.
Num browser, o documento HTML utiliza uma interface gráfica embutida. O
interpretador Javascript recebe do browser os eventos capturados pelo
sistema operacional e notifica os scripts em execução.
Um script pode definir trechos de código a serem executados quando um
determinado evento ocorrer: são os tratadores de eventos (event handlers).
Em javascript, basta atribuir um bloco de código ao evento desejado para
que ele seja executado pelo navegador a cada vez que o evento ocorrer.
Como todos os eventos ocorrem para um elemento ou objeto qualquer, todo
evento é manipulado como propriedade um elemento ou objeto.
Prototype JS - Overview
Javascript
A programação orientada a eventos
<input type="chkMsg" name=“chkMsg" value=“msg“ onclick=“exibirMsg();"></input>
<body onload=“exibirMsg();”></body>



var oChkM;
//checkbox chkMsg
oChkM = document.getElementById(‘chkMsg’);
oChkM.onclick = exibirMsg;
//obter checkbox
//definir handler p/ evento onclick
window.onload = exibirMsg;
//definir handler p/ evento onload
No meio do markup HTML, é possível definir o código Javascript a ser acionado quando o
evento ‘onclick’ for disparado: esse código é o tratador (handler) do evento onclick
Mas a forma ideal de se definir o handler é diretamente através do código Javascript,
utilizando a propriedade ‘onclick’ do objeto ‘chkMsg’, obtido utilizando-se os métodos do
DOM.
Para a definição de um handler, podem ser usadas funções anônimas, assim como em
qualquer outra situação em que um bloco de código precise ser passado como dado.
Prototype JS - Overview
Javascript
A programação orientada a eventos


var oChkM;
//checkbox chkMsg
oChkM = document.getElementById(‘chkMsg’);
oChkM.addEventListener(‘click’, exibirMsg, false);
//obter checkbox
//definir handler p/ evento onclick
window.addEventListener(‘load’, exibirMsg, false);
//definir handler p/ evento onload
var oChkM;
//checkbox chkMsg
oChkM = document.getElementById(‘chkMsg’);
oChkM.attachEvent(‘onclick’, exibirMsg, false);
//obter checkbox
//definir handler p/ evento onclick IE
window.attachEvent(‘onload’, exibirMsg, false);
//definir handler p/ evento onload IE
O método ideal, no entanto, é utilizar o modelo de registro de eventos do W3C,
baseado nos métodos addEventListener e removeEventListener
É importante atentar para as diferenças entre os browsers. No caso do Internet
Explorer, por exemplo, os métodos são adicionados e removidos pelos métodos
attachEvent e detachEvent, respectivamente
Prototype JS - Overview
Javascript
A programação orientada a eventos
function exibirMsg()
{
alert(this.availHeight);
}
window.addEventListener(‘load’, exibirMsg, false);


//definir handler p/ evento onload
Uma função chamada como tratador de um evento pode utilizar a palavra-chave this,
exatamente como ocorre com uma função chamada como método de um objeto.
No caso do evento, a palavra-chave this se refere ao elemento para o qual o evento foi
disparado.
DOM e Ajax
Prototype JS - Overview
Javascript
Document Object Model
Prototype JS - Overview
Javascript
Document Object Model





O padrão W3C DOM foi criado para representar documentos XML e HTML,
especifica várias interfaces a serem implementadas pelos navegadores, como
Node, Element, Attr, Document, etc. Essas interfaces, uma vez implementadas
pelos browsers, dão ao script condições de acessar e modificar o documento
HTML carregado
O DOM representa o documento HTML carregado pelo browser numa estrutura
de árvore composta de nós (Nodes)
Cada nó da árvore representa um elemento existente no documento HTML, e
pode ser de vários tipos: ELEMENT_NODE (1), ATTRIBUTE_NODE (2),
TEXT_NODE (3), COMMENT_NODE (8), DOCUMENT_NODE (9), e
DOCUMENT_FRAGMENT_NODE (11)
A interface Node especifica vários métodos e propriedades que permitem
atravessar e manipular a árvore de nós, como: firstChild, lastChild, nextSibling,
previousSibling, parentNode, childNodes, appendChild, removeChild,
replaceChild, insertBefore, etc.
Os atributos de um elemento do documento HTML, como o atributo src de uma
imagem, podem ser acessados pelos métodos getAttribute, setAttribute e
removeAttribute. A propriedade attributes (um array de propriedades) é
implementada de modo incompatível pelo Internet Explorer
Prototype JS - Overview
Javascript
Document Object Model
<div id="exemplo">
Esse é um <h3>exemplo de HTML</h3> <br /> sobre DOM
</div>
DIV
attributes
childNodes
id = “exemplo”
“Esse é um”
H3
childNodes
“exemplo de HTML”
BR
“sobre DOM”
Prototype JS - Overview
Javascript
Document Object Model
var oC;
var aP;
var aOp;
//div container
//array contendo tags P
//array com os radio buttons rdoOp
oC = document.getElementById(‘container’);
//obter DIV container
aP = document.getElementsByTagName(‘p’);//obter todas as tags P
aP = oC.getElementsByTagName(‘p’);
//tags P dentro da DIV container
aOp = document.getElementsByName(‘rdoOp’); //radio buttons com name = rdoOp


Para acessar os elementos existentes num documento HTML, o objeto
document fornece dois métodos principais: getElementById,
getElementsByName e getElementsByTagName.
O objeto document não representa a raiz da árvore DOM. Essa raiz, ou seja, o
elemento <html>, é acessada pela propriedade document.documentElement. O
mesmo ocorre com o elemento <body>, que pode ser acessado como
document.body. No entanto, pode-se acessar o elemento <body>, por exemplo,
com document.getElementsByTagName(‘body’)[0]
Prototype JS - Overview
Javascript
Document Object Model
var oC;
//div container
oC = null;


oC = document.getElementById(‘container’);
alert(oC.id);
//obter DIV container
//exibirá ‘container’
oC.className = ‘painel’;
oC.style.width = ‘100%’;
oC.style.backgroundColor = ‘#F00’;
//alterar classe css para ‘painel’
//alterar css width para 100%
//alterar cor de fundo para vermelho
Além de interfaces como Node, Element e Document, que são comuns a HTML
e XML, o padrão especifica interfaces, propriedades e métodos exclusivos para
documentos HTML, como HTMLDocument, HTMLElement, HTMLBodyElement e
HTMLTitleElement
A interface HTMLElement define as propriedades id, style, title, dir, lang e
className, que existem, portanto, para todos os elementos do documento
HTML acessados via DOM
Prototype JS - Overview
Javascript
Document Object Model

var oC;
var oLnk;
var oTx;
//DIV container
//elemento A dentro de container
//texto do elmento A
oC = document.getElementById(‘container’);
//obter DIV container
oLnk = document.createElement(‘a’);
oTx = document.createTextNode(‘Índice’);
//criar elemento A
//criar TextNode para inserir em A
oLnk.appendChild(oTx);
oLnk.setAttribute(‘href’, ‘http://www.alistapart.com’);
//inserir TextNode no elemento A
//definir href do elemento A
oC.appendChild(oLnk);
//adicionar elemento A ao container
Para modificar o documento HTML, é preciso utilizar métodos que criam novos
nós, acessam e identificam nós dentro do documento, obtêm e modificam
atributos dos elementos.
Prototype JS - Overview
Javascript
AJAX
Asynchronous Javascript and XML
Prototype JS - Overview
Javascript
AJAX





O protocolo HTTP especifica como os browsers solicitam documentos e como
submetem formulários de dados de formulários a um servidor web; e como o
servidor web deve responder a tais solicitações e formulários de dados
Originalmente, scripts não tinham absolutamente nenhum controle sobre
solicitações e respostas HTTP. A única forma de se fazer uma solicitação HTTP
era clicar num link ou submeter um formulário de dados
Posteriormente, formas limitadas começaram a surgir. A princípio, improvisações
como as propriedades src de tags img e script; mais tarde, com o uso do objeto
location e iframes
O objeto XMLHttpRequest, fundamental para a técnica Ajax, foi criado pela
Microsoft para utilização pelo Outlook Web Access, e estava disponível no
Internet Explorer desde a versão 5.0, lançada em 1999
A primeira versão do objeto XMLHttpRequest, no entanto, era acessada via
ActiveX. Não existia, na época, um construtor Javascript para instanciar o objeto.
Foi só com a adoção do objeto por outros browsers e a padronização por parte
do W3C que a forma atual de se utilizar o objeto se tornou comum e oficial
Prototype JS - Overview
Javascript
AJAX
var oRq;
try
{
oRq = new XMLHttpRequest();
//Requisição HTTP via XMLHttpRequest
//Instanciando objeto (Gecko)
oRq.open(“GET”, “testeClientes.asp”, false); //Preparar requisição GET síncrona
oRq.send(null);
//Fazer requisição
}
catch (poE)
{
alert(“Não foi possível realizar a solicitação HTTP.”);
}
if (oRq.status == 200)
{
alert(oRq.responseText);
}

//Resposta HTTP = 200 (OK)?
//Exibir dados enviados pelo servidor
Requisição síncrona: se o servidor parar de responder, o método send bloqueia
a execução do script por muito tempo, e o browser também “trava” (dependendo
da plataforma).
Prototype JS - Overview
Javascript
AJAX
…
oRq.open(“GET”, “testeClientes.asp”, true); //Preparar requisição GET assíncrona
oRq.send(null);
//Fazer requisição
…
oRq.onreadystatechange = function ()
{
if (oRq.readyState == 4 && oRq.status == 200)
{
alert(oRq.responseText);
}
};



Requisição assíncrona: a execução do script continua, mesmo após a chamada ao
método send
O objeto XMLHttpRequest recebeu um tratador (handler) para o evento
onreadystatechange. Quando o evento ocorrer, esse tratador será executado
O evento onreadystatechange ocorre a cada mudança de estado da solicitação HTTP.
Quando o estado é 4, a resposta do servidor está completa. Se for bem-sucedida (código
200), é possível obtê-la pela propriedade responseText
Prototype JS - Overview
Javascript
AJAX

Estados possíveis da solicitação HTTP (propriedade readyState)

0 – Requisição não iniciada (método open ainda não foi chamado)

1 – Requisição configurada (método open chamado, método send não)

2 – Requisição enviada (método send chamado; servidor não respondeu)

3 – Requisição em processamento (dados sendo recebidos pelo servidor)

4 – Requisição completa (resposta do servidor concluída)
Prototype JS - Overview
Javascript
Outros pontos importantes
Prototype JS - Overview
Javascript
Execução dinâmica



Em algumas linguagens, sobretudo linguagens interpretadas, é possível
avaliar e executar uma string como se ela fosse um trecho de
código
O interpretador executa o código contido na string e/ou retorna o
resultado da expressão contida nela, para uso do programador
Em Javascript, isso é obtido através da função eval
var sC;
//código javascript
sC = “var iN = 7; alert(iN);”;
eval(sC);
Prototype JS - Overview
Javascript
AJAX
“Os maiores desafios à criação de aplicações Ajax não são de ordem técnica.
Hoje, as tecnologias Ajax essenciais são maduras, estáveis e bem
compreendidas. Os desafios existem, na verdade, para os que projetam
aplicações Ajax: esquecer aquilo que pensamos saber sobre as limitações da
web e começar a imaginar uma gama de possibilidades mais rica e mais ampla.
Será algo divertido.”
Jesse James Garrett – criador do termo Ajax
Prototype JS
Prototype JS - Overview
Prototype
Extensões do DOM
Prototype JS - Overview
Javascript
Extensões do DOM


A parte principal do framework Prototype JS são as extensões feitas ao
Document Object Model
A classe Element, contida no framework, possui o método extend, que
adiciona a um elemento qualquer do DOM uma série de propriedades e
métodos especiais
var oC;
//div container
oC = document.getElementById(‘container’);
oC.style.display = ‘none’;
var oC;
//div container
oC = document.getElementById(‘container’);
Element.extend(oC);
oC.hide();
Prototype JS - Overview
Javascript
Métodos utilitários


O Prototype JS possui vários métodos especiais, chamados de métodos
utilitários
Esses métodos adicionam outras facilidades à manipulação do
documento ou servem como apelidos para métodos de classes
específicas
var oC;
//div container
oC = $(‘container’);
oC.hide();
//método utilitário $ (wrapper p/ getElementById e chama extend)
var oTxN;
//textbox nome
oTxN = $(‘txtNome’);
alert($F(oTxN));
//método $F - exibirá o valor do campo txtNome
Prototype JS - Overview
Javascript
Métodos utilitários





$ - Recebe uma string ou um elemento. No primeiro caso, procura no
documento o objeto cujo id seja igual à string passada como parâmetro.
No segundo, aplica Element.extend ao elemento passado como
parâmetro
$$ - Recebe uma string contendo um seletor CSS e retorna um array
contendo todos os elementos do documento que podem ser obtidos
através daquele seletor
$F – Recebe um elemento da página como parâmetro e retorna o valor
do elemento. Utilitário para o método Form.Element.getValue
$A – Recebe qualquer dado que possa ser acessado através de índices,
isto é, que se comporte como um array, e o estende através da classe
Array do framework, adicionando recursos extra
…
Prototype JS - Overview
Javascript
Orientação a objetos utilizando Prototype JS

O Prototype JS possui recursos especiais para facilitar a aplicação da
orientação a objetos em Javascript
var Pessoa = Class.create
(
{
initialize:
function(psNm) { this.nome = psNm; }
}
);
var Bebado = Class.create
(
Pessoa,
{
zoar:
function() { return ‘Se eu pudesse, eu matarra mil!’);
}
);
var oJ;
oJ = new Bebado(‘Jeremias’);
oJ.zoar();
}
Prototype JS - Overview
Javascript
Orientação a objetos utilizando Prototype JS
…
var Bebado = Class.create
(
Pessoa,
{
zoar: function() { return ‘Se eu pudesse, eu matarra mil!’; }
}
);
var TiradorDeOnda = Class.create
(
Bebado,
{
zoar: function($super) { return $super() + ‘Mas gosto de dar uma zoadinha!’ }
}
);
var oL;
oL = new TiradorDeOnda(‘Lonaldo’);
oL.zoar();
//exibirá ‘Se eu pudesse, eu matarra mil! Mas gosto de dar uma zoadinha!’
Prototype JS - Overview
Javascript
Ajax utilizando Prototype JS


O Prototype JS possui a classe especial Ajax, que provê, junto com o
restante do framework, muitas facilidades para o uso da técnica
Uma das vantagens mais importantes é que todos os recursos são
cross-browser
new Ajax.Request(‘paginaTeste.asp’, { method: ‘get’ });
new Ajax.Request
(
‘paginaTeste.asp’,
{
method:
‘get’,
parameters: { nome: ‘Leonaldo’, pingas: 8 }
}
);
Prototype JS - Overview
Javascript
Ajax utilizando Prototype JS
new Ajax.Request
(
‘paginaTeste.asp’,
{
method:
‘get’,
parameters: { nome: ‘Leonaldo’, pingas: 8 },
onSuccess: tratarResp,
onFailure:
tratarErro
}
);
function tratarResp(poR)
{
alert(poR.responseText);
}
//handler p/ tratar a resposta do servidor
function tratarErro()
{
alert(‘Houve um erro na solicitação HTTP’);
}
//handler para erro na solicitação
Prototype JS - Overview
Javascript
Ajax utilizando Prototype JS
new Ajax.Request
(
‘paginaTeste.asp’,
{
method:
‘get’,
parameters: $(‘frmDados’).serialize(),
onSuccess: tratarResp,
onFailure:
tratarErro
}
);
function tratarResp(poR)
{
alert(poR.responseText);
}
//handler p/ tratar a resposta do servidor
function tratarErro()
{
alert(‘Houve um erro na solicitação HTTP’);
}
//handler para erro na solicitação
Prototype JS - Overview
Javascript
Ajax utilizando Prototype JS


A junção dos recursos Ajax com os demais recursos do framework dá
resultados extremamente interessantes e altamente produtivos
Exemplos disso são as classes Ajax.Updater e Ajax.PeriodicalUpdater
<div id=“menu”>Carregando…</div>
new Ajax.Updater
(
‘menu’,
‘menuLoader.asp’,
{
method: ‘get’
}
);
new Ajax.Updater
(
{ success: ‘menu’, failure: ‘erro’ },
…
Prototype JS - Overview
Javascript
Ajax utilizando Prototype JS


A junção dos recursos Ajax com os demais recursos do framework dá
resultados extremamente interessantes e altamente produtivos
Exemplos disso são as classes Ajax.Updater e Ajax.PeriodicalUpdater
<div id=“chat”>Carregando…</div>
new Ajax.PeriodicalUpdater
(
‘chat’,
‘atualizacaoChat.asp’,
{
method: ‘get’,
insertion: Insertion.Bottom,
frequency: 2
}
);
Prototype JS - Overview
Considerações finais
Prototype JS - Overview
Considerações finais




A linguagem Javascript deverá, em breve, chegar a sua versão 2,
oferecendo suporte nativo a classes, herança e outros paradigmas da
orientação a objetos tradicional
Os webstandards e a adoção de padrões de acessibilidade e usabilidade
estão transformando o ambiente de desenvolvimento para web numa
plataforma séria e confortável para o usuário
Tecnologias como JIT (just-in-time), atualmente utilizada pelo Google
Chrome, serão implementadas nas próximas versões do Mozilla Firefox e
demais browsers de peso, acelerando dramaticamente a execução de
scripts no navegador e permitindo aplicações muito mais pesadas e
robustas
O amadurecimento de tecnologias padronizadas pelo W3C, como SVG,
CSS3, MathML e outras, permitirá que todas sejam utilizadas
simultaneamente num mesmo documento, transformando
completamente os recursos visuais, de animação e interação com o
usuário
Prototype JS - Overview
Considerações finais



Estamos vivendo os primeiros anos da Web 2.0. Num futuro próximo, a
integração com dispositivos móveis, como celulares e PDAs, e a difusão
de redes Wireless abertas fará com que a programação para internet
modifique o modo de vida de milhões de pessoas
A computação em nuvem (cloud computing), utilizando browsers superpoderosos e redes wireless, permitirá que a utilização de editores de
texto e planilhas eletrônicas, a visualização de filmes e a manutenção de
todas essas informações online, acessíveis pelo celular ou por notebooks
Sistemas de GPS ganharão força com as redes wireless abertas, e
provavelmente serão incluídos em muitos automóveis. Em breve,
teremos pequenos dispositivos para acesso a web dentro dos veículos,
em postos de conveniência, etc.
Prototype JS - Overview
Considerações finais
Nós somos participantes ativos dessa transformação. Podemos
contribuir com a evolução de várias dessas tecnologias e garantir
que permaneçam abertas, não-proprietárias, de acordo com as
recomendações dos órgãos reguladores da internet.
Prototype JS - Overview
Referências
Flanagan, D. – O’Reilly - Javascript: The Definitive Guide, 5th Edition
World Wide Web Consortium – www.w3.org
Prototype JS - http://www.prototypejs.org/
Ajaxian - http://ajaxian.com/
A List Apart - http://www.alistapart.com/
Wikipedia – http://en.wikipedia.org/
Daniel Guimarães
[email protected]
Download

Prototype JS - Overview