SlideShare uma empresa Scribd logo
JavaScript
Introdução
Esta imersão é baseada no ótimo
livro “JavaScript: The Good Parts”
de Douglas Crockford
História e por quê ...
• É a linguagem do browser
• Alinguagem mais popular do mundo
• Feita em 1995 para o Netscape 2.0 sob
o nome de Mocha depois LiveScript e
por fim JavaScript (ECMAScript)
• A Microsoft adotou JavaScript no IE 3.0
em 1996
Brendan Eich
O porquê da má fama
• Sempre foi “a outra”
• Nome terrível !
• Control + C e Control + V
• APIs diferentes entre browsers
• Algumas características bem ruins (bad parts)
The bad parts
• Variáveis globais
• Escopo
• Inserção de ponto-e-vírgula
• Palavras reservadas
• parseInt
• +
• Valores falsos
• ==
... vamos nos focar nas partes boas !
The good parts
• Funções como valores
• Objetos dinâmicos
• Tipos fracos
• JSON
... e mais importante
não dá para fugir
Ambiente de testes
• Você vai precisar:
• Editor de texto
• Browser
• Conexão com a Internet
Ambiente de testes
• Editor de texto (sugestões):
• Sublime Text 2
• TextMate
• gedit
• Notepad++
Ambiente de testes
src="programa.js"></script>
Testando');
programa.html
<html>
<body>
<pre>
<script
</pre>
</body>
</html>
programa.js
document.writeln('123
Resultado
Um pouco de sintaxe
É importante para a sabermos como
escrever nossos programas !
Nomes
• Um nome é uma letra seguido, opcionalmente,
por outras letras, números e underlines
• Ex:
• a
• x1_
• nomeCompleto
• data_de_nascimento
Palavras Reservadas
abstract enum interface throw
boolean export long throws
break extends native transient
byte false new true
case final null try
catch finally package typeof
char float private var
class for protected volatile
const function public void
continue goto return while
debugger if short with
default implements static
delete import super
do in switch
double instanceof synchronized
else int this
Números
• Exemplos:
• Inteiros: 0 12 -39 42
• Frações: 3.14
• Exponenciais: 3.14e+30
Operadores Aritméticos
+ soma --
- subtração +=
/ divisão -=
* multiplicação *=
% resto da divisão /=
++ %=
Funções
• toFixed(casasDecimais)
• Arredonda para o número de casas
decimais
• isNaN(número)
• Diz se o número é NaN (not a number
- valor indeterminado)
Strings
• Aspas:
• “Fulano de Tal”
• Apóstrofos :
• ‘123 Testando’
Strings
• Propriedades:
• length - Quantidade de caracteres
• Métodos:
• indexOf(str)
• replace(a, b)
• split(delimitador)
• substring(inicio, fim)
• toLowerCase( )
• toUpperCase( )
Strings
• Conversões:
• parseInt(str) - String para inteiro
• parseFloat(str) - String para float
Booleanos
true e false
‣ Valores falsos:
‣ false
‣ null
‣ undefined
‣ String vazio ‘’
‣ 0
‣ NaN
Arrays (literais)
• Vazio:
• [ ]
• new Array( )
• Com elementos:
• [‘banana’, ‘laranja’, ‘pitomba’]
Arrays
• Exemplo:
var carros = new Array( );
carros[0] = “Volvo”;
carros[1] = “BMW”;
carros[2] = “Mercedes”;
• Tamanho do array:
document.writeln(carros.length);
• Acessando valores:
document.writeln(carros[1]);
Statements
COMENTÁRIOS
• De linha
• / / Comentário
• De bloco
• /* Comentário de 1 ou n linhas */
VARIÁVEIS
• var nome = expressão;
• Exemplo:
• var idade = 20;
• var pais = ‘Brasil’;
IF
• Exemplo:
var saldo = 10.0;
// Verificando se o saldo é suficiente
if (saldo < 0) {
document.writeln (“Saldo insuficiente”);
} else {
document.writeln (“Operação realizada”);
}
Operadores Relacionais
• > Maior
• >= Maior ou igual
• < Menor
• <= Menor ou igual
• == Igual
• != Diferente
• === Igual
• !== Diferente
cuidado com == e !=
==
'' == '0' // false
0 == '' // true
0 == '0' // true
false == 'false' // false
false == '0' // true
false == undefined // false
false == null // false
null == undefined // true
SEMPRE use === e !==
===
''=== '0' // false
0 === '' // false
0 === '0' // false
false === 'false' // false
false === '0' // false
false === undefined // false
false === null // false
null === undefined // false
Operadores Lógicos
• && e lógico (AND)
• || ou lógico (OR)
CURTO CIRCUITO
Curto Circuito
• Os operadores lógicos têm curto circuito
• Assim que for possível inferir o valor da expressão,
sua avaliação é interrompida
• &&:
• Assim que um valor false for encontrado toda a
expressão será false
• ||:
• Assim que um valor true for encontrado toda a
expressão será true
WHILE
• Exemplo:
var contador = 10;
// Contagem regressiva
while (contador >= 0) {
document.writeln(contador);
contador--;
}
FOR
FOR
• Exemplo:
for (var i = 0; i < 100; i++) {
document.writeln(i);
}
• Exemplo:
var nomes = ['fulano', 'cicrano', 'beltrano'];
for (var indice in nomes) {
document.writeln(nomes[indice])
;
FUNÇÕES
FUNÇÕES
• Exemplo:
function soma(a, b) {
return a + b;
}
• Exemplo:
var maior = function(a, b) {
if (a > b) {
return a;
} else {
return b;
}
}
Uma variável com uma função !
OBJETOS
• Em JavaScript objetos guardam um
conjunto de duplas chave-valor
• Por exemplo, um objeto vôo pode ter a
seguinte chave: horário, com o valor:
“18:30”
OBJETOS
• Objeto vazio:
var objeto = {}
• Objeto com propriedades:
var candidato = {
nome: "Manoel da Silva",
idade: 28,
terceiroGrau: true,
cargoPretendido: "Analista de Sistemas"
}
OBJETOS
• Podem ser complexos:
var voo = {
companhia: "Oceanic",
numero: 815,
partida: {
aeroporto: "SYD",
"22/09/2004 14:55",
"Sydney"
horario:
cidade:
},
chegada: {
aeroporto: "LAX",
"23/09/2004 10:42",
horario:
cidade: "Los Angeles"
}
}
Acessando valores
• candidato[“nome”]
• candidato.nome
• voo.partida.horario
Atribuindo valores
• candidato.idade = 29
• candidato[‘aprovado’] = false
• voo.situacao = ‘Desaparecido’
CONSTRUTORES
• Um construtor é uma função normal
que cria um novo objeto utilizando a
variável implícita this
• Um construtor deve ser sempre
chamado utilizando o comando new
CONSTRUTORES
function Conta(titular) {
this.titular = titular;
this.saldo = 0;
this.depositar = function(valor) {
this.saldo += valor;
};
this.sacar = function(valor) {
-= valor;
this.saldo
};
this.transferir = function(outraConta, valor) {
this.sacar(valor);
outraConta.depositar(valor);
}
}
CONSTRUTORES
var c1 = new Conta("Pedro");
var c2 = new Conta("Maria");
c1.depositar(100);
c2.depositar(50);
c1.transferir(c2, 60);
document.writeln(c1.titular + " - R$ " + c1.saldo);
document.writeln(c2.titular + " - R$ " + c2.saldo);
PROTOTYPE
• Todos os objetos estão ligados a um
prototype
• Os objetos heram suas propriedades deste
prototype
• Alterando-se o prototype, altera-se todos os
objetos ligados a ele
• Todos os prototypes herdam de
Object.prototype
PROTOTYPE
Conta.prototype.toString = function() {
return this.titular + " - R$ " + this.saldo;
};
document.writeln(c1.toString())
;
document.writeln(c2.toString())
;
PROTOTYPE
Number.prototype.dinheiro = function() {
var valor = "" + this.toFixed(2);
valor = valor.replace(".", ",");
return "R$ " + valor;
}
var salario = 649.67;
document.writeln(salario.dinheiro());
REFLEXÃO
• typeof
• Retorna um String com o tipo de um
valor
• Exemplo:
document.writeln(typeof Conta);
document.writeln(typeof c1);
document.writeln(typeof c1.titular);
document.writeln(typeof c1.saldo);
document.writeln(typeof c1.sacar);
REFLEXÃO
• É possível utilizar um for para
percorrer as propriedades de um objeto:
document.writeln("Analisando o objeto c1 ...");
for (propriedade in c1) {
if (typeof c1[propriedade] === 'function') {
document.writeln(" Metodo: " + propriedade);
} else {
document.writeln(" Atributo: " + propriedade);
}
}
REFLEXÃO
• E se eu quiser criar um método em
todos os objetos chamado inspect, que
irá mostrar os atributos e métodos dos
objetos ?
REFLEXÃO
// Criação do método inspect
Object.prototype.inspect = function() {
var str = "";
for (propriedade in this) {
tipo = typeof this[propriedade];
var
if (tipo === 'function') {
str += "Metodo: " + propriedade + "n";
} else {
str += "Atributo: " + propriedade + " (" + tipo + ")" + "n";
}
}
return str;
};
// Testando o método inspect
document.writeln("c1:n" + c1.inspect());
document.writeln("c2:n" + c2.inspect());
EXCEÇÕES
• O tratamento de exceções permite a
notificação (lançamento) e o tratamento
de situações de falha
EXCEÇÕES
• Lançamento de exceções:
• throw valor
• Exemplo:
...
this.sacar = function(valor) {
if (valor > this.saldo) {
throw "Saldo Insuficiente";
}
this.saldo -= valor;
};
...
EXCEÇÕES
• Tratamento:
var c1 = new Conta("Pedro");
try {
c1.sacar(500);
} catch (erro) {
document.writeln("Erro: " + erro);
}
Uma Boa Prática
Utilize Namespaces
• Evite utilizar variáveis globais;
• Crie todas as suas variáveis, funções,
objetos dentro de namespaces
(containers);
• Exemplo:
var MINHA_APLICACAO = {};
MINHA_APLICACAO.versao = 2.0;
MINHA_APLICACAO.Pessoa = function(nome, idade) {
this.nome = nome;
this.idade = idade;
};
MINHA_APLICACAO.pessoas = new Array();
Aplicações
JQuery
jquery.com
• Biblioteca JavaScript mais utilizada
• Uma camada acima da API do browser
• Simplifica o acesso aos objetos das
páginas
Instalação
• Faça o download do jQuery e copie
para seu projeto
• OU
• Utilize direto de uma CDN
• Ex: Google CDN
Utilizando a Google CDN
<html>
<body>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js">
</script>
src="programa.js"></script>
<script
</body>
</html>
programa.html
programa.js
$(function() {
alert("oi");
});
JQuery
• Ponto de entrada
• Todo script JQuery começa com um
ponto de entrada que será executado
apenas quando a página estiver pronta
$(function() {
// Ponto de entrada
});
JQuery
• Os elementos de uma página são
acessados em JQuery através de
seletores
• Seletores:
• id: $(‘#id’)
• classe: $(‘.classe’)
• tag: $(‘tag’)
Atributos dos Elementos
• Um elemento pode ser modificado e
consultado através dos seguintes métodos:
• attr
• removeAttr
• val
• text
• html
Eventos
• blur
• change
• click
• dblclick
• focus
• keydown
• keypress
<html>
<body>
A <input type="text" id="a">
B <input type="text" id="b">
<button id="mais">+</button>
<input type="text" id="resultado">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js">
</script>
<script src="programa.js">
</script>
</body>
</html>
Calculadora
programa.html
var a = parseFloat($('#a').val());
var b = parseFloat($('#b').val());
var c = a + b;
$('#resultado').val(c.toFixed(2));
});
});
Calculadora
programa.js
$(function() {
$('#mais').click(function() {
Calculadora
CALCULADORA.somar = function(a, b) {
var c = a + b;
c.toFixed(2);
return
};
$(function() {
$('#mais').click(function() {
var a = parseFloat($('#a').val());
var b = parseFloat($('#b').val());
b));
$('#resultado').val(CALCULADORA.somar(a,
});
});
programa.js
var CALCULADORA = {};
O que não vimos
• Regex
• Outras bibliotecas
• ExtJS
• YUI
• NodeJS

Mais conteúdo relacionado

Semelhante a Introdução ao JS1.pptx

TDC2013 Otimizando-C
TDC2013 Otimizando-CTDC2013 Otimizando-C
TDC2013 Otimizando-C
osmarcf
 
LabMM3 - Aula teórica 05
LabMM3 - Aula teórica 05LabMM3 - Aula teórica 05
LabMM3 - Aula teórica 05Carlos Santos
 
Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - FunctionsWesley Lemos
 
Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
GustavoBarrosLins1
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
José Volmei Dal Prá Junior
 
Debugging tips and tricks
Debugging tips and tricksDebugging tips and tricks
Debugging tips and tricks
Tales Andrade
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011JogosUnisinos
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
Eder Magalhães
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascalJocelma Rios
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
Luciano Ramalho
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
Gregorio Kusowski
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOWesley Lemos
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetrosMaurício Linhares
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScriptCarlos Santos
 
Curso lógica de programação
Curso   lógica de programaçãoCurso   lógica de programação
Curso lógica de programaçãoPaulo Batista
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Willian Magalhães
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
Regis Magalhães
 
Programação orientada a objetos em delphi
Programação orientada a objetos em delphiProgramação orientada a objetos em delphi
Programação orientada a objetos em delphi
Helder Lopes
 
Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
Eduardo Nicola F. Zagari
 

Semelhante a Introdução ao JS1.pptx (20)

TDC2013 Otimizando-C
TDC2013 Otimizando-CTDC2013 Otimizando-C
TDC2013 Otimizando-C
 
LabMM3 - Aula teórica 05
LabMM3 - Aula teórica 05LabMM3 - Aula teórica 05
LabMM3 - Aula teórica 05
 
Javascript para CSharpers 2 - Functions
Javascript para CSharpers   2 - FunctionsJavascript para CSharpers   2 - Functions
Javascript para CSharpers 2 - Functions
 
Aula 3-lógica.pptx
Aula 3-lógica.pptxAula 3-lógica.pptx
Aula 3-lógica.pptx
 
Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001Programação Orientada a Objetos - 001
Programação Orientada a Objetos - 001
 
Debugging tips and tricks
Debugging tips and tricksDebugging tips and tricks
Debugging tips and tricks
 
Ruby on rails gds 2011
Ruby on rails   gds 2011Ruby on rails   gds 2011
Ruby on rails gds 2011
 
Introducao Google GO
Introducao Google GOIntroducao Google GO
Introducao Google GO
 
Lógica de programação pascal
Lógica de programação   pascalLógica de programação   pascal
Lógica de programação pascal
 
Sobrecarga operadores
Sobrecarga operadoresSobrecarga operadores
Sobrecarga operadores
 
Objetos Pythonicos - compacto
Objetos Pythonicos - compactoObjetos Pythonicos - compacto
Objetos Pythonicos - compacto
 
Ruby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanosRuby - Criando código para máquinas e humanos
Ruby - Criando código para máquinas e humanos
 
Javascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POOJavascript para CSharpers 4 - POO
Javascript para CSharpers 4 - POO
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript(A06) LabMM3 - JavaScript
(A06) LabMM3 - JavaScript
 
Curso lógica de programação
Curso   lógica de programaçãoCurso   lógica de programação
Curso lógica de programação
 
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)Curso Desenvolvimento WEB com PHP - PHP (parte 1)
Curso Desenvolvimento WEB com PHP - PHP (parte 1)
 
Curso Ruby
Curso RubyCurso Ruby
Curso Ruby
 
Programação orientada a objetos em delphi
Programação orientada a objetos em delphiProgramação orientada a objetos em delphi
Programação orientada a objetos em delphi
 
Introdução à Linguagem Ruby
Introdução à Linguagem RubyIntrodução à Linguagem Ruby
Introdução à Linguagem Ruby
 

Introdução ao JS1.pptx

  • 2. Introdução Esta imersão é baseada no ótimo livro “JavaScript: The Good Parts” de Douglas Crockford
  • 3. História e por quê ... • É a linguagem do browser • Alinguagem mais popular do mundo • Feita em 1995 para o Netscape 2.0 sob o nome de Mocha depois LiveScript e por fim JavaScript (ECMAScript) • A Microsoft adotou JavaScript no IE 3.0 em 1996 Brendan Eich
  • 4. O porquê da má fama • Sempre foi “a outra” • Nome terrível ! • Control + C e Control + V • APIs diferentes entre browsers • Algumas características bem ruins (bad parts)
  • 5. The bad parts • Variáveis globais • Escopo • Inserção de ponto-e-vírgula • Palavras reservadas • parseInt • + • Valores falsos • ==
  • 6. ... vamos nos focar nas partes boas !
  • 7. The good parts • Funções como valores • Objetos dinâmicos • Tipos fracos • JSON
  • 8. ... e mais importante
  • 10. Ambiente de testes • Você vai precisar: • Editor de texto • Browser • Conexão com a Internet
  • 11. Ambiente de testes • Editor de texto (sugestões): • Sublime Text 2 • TextMate • gedit • Notepad++
  • 14. Um pouco de sintaxe É importante para a sabermos como escrever nossos programas !
  • 15. Nomes • Um nome é uma letra seguido, opcionalmente, por outras letras, números e underlines • Ex: • a • x1_ • nomeCompleto • data_de_nascimento
  • 16. Palavras Reservadas abstract enum interface throw boolean export long throws break extends native transient byte false new true case final null try catch finally package typeof char float private var class for protected volatile const function public void continue goto return while debugger if short with default implements static delete import super do in switch double instanceof synchronized else int this
  • 17. Números • Exemplos: • Inteiros: 0 12 -39 42 • Frações: 3.14 • Exponenciais: 3.14e+30
  • 18. Operadores Aritméticos + soma -- - subtração += / divisão -= * multiplicação *= % resto da divisão /= ++ %=
  • 19. Funções • toFixed(casasDecimais) • Arredonda para o número de casas decimais • isNaN(número) • Diz se o número é NaN (not a number - valor indeterminado)
  • 20. Strings • Aspas: • “Fulano de Tal” • Apóstrofos : • ‘123 Testando’
  • 21. Strings • Propriedades: • length - Quantidade de caracteres • Métodos: • indexOf(str) • replace(a, b) • split(delimitador) • substring(inicio, fim) • toLowerCase( ) • toUpperCase( )
  • 22. Strings • Conversões: • parseInt(str) - String para inteiro • parseFloat(str) - String para float
  • 23. Booleanos true e false ‣ Valores falsos: ‣ false ‣ null ‣ undefined ‣ String vazio ‘’ ‣ 0 ‣ NaN
  • 24. Arrays (literais) • Vazio: • [ ] • new Array( ) • Com elementos: • [‘banana’, ‘laranja’, ‘pitomba’]
  • 25. Arrays • Exemplo: var carros = new Array( ); carros[0] = “Volvo”; carros[1] = “BMW”; carros[2] = “Mercedes”; • Tamanho do array: document.writeln(carros.length); • Acessando valores: document.writeln(carros[1]);
  • 27. COMENTÁRIOS • De linha • / / Comentário • De bloco • /* Comentário de 1 ou n linhas */
  • 28. VARIÁVEIS • var nome = expressão; • Exemplo: • var idade = 20; • var pais = ‘Brasil’;
  • 29. IF • Exemplo: var saldo = 10.0; // Verificando se o saldo é suficiente if (saldo < 0) { document.writeln (“Saldo insuficiente”); } else { document.writeln (“Operação realizada”); }
  • 30. Operadores Relacionais • > Maior • >= Maior ou igual • < Menor • <= Menor ou igual • == Igual • != Diferente • === Igual • !== Diferente
  • 32. == '' == '0' // false 0 == '' // true 0 == '0' // true false == 'false' // false false == '0' // true false == undefined // false false == null // false null == undefined // true
  • 33. SEMPRE use === e !==
  • 34. === ''=== '0' // false 0 === '' // false 0 === '0' // false false === 'false' // false false === '0' // false false === undefined // false false === null // false null === undefined // false
  • 35. Operadores Lógicos • && e lógico (AND) • || ou lógico (OR)
  • 37. Curto Circuito • Os operadores lógicos têm curto circuito • Assim que for possível inferir o valor da expressão, sua avaliação é interrompida • &&: • Assim que um valor false for encontrado toda a expressão será false • ||: • Assim que um valor true for encontrado toda a expressão será true
  • 38. WHILE • Exemplo: var contador = 10; // Contagem regressiva while (contador >= 0) { document.writeln(contador); contador--; }
  • 39. FOR
  • 40. FOR • Exemplo: for (var i = 0; i < 100; i++) { document.writeln(i); } • Exemplo: var nomes = ['fulano', 'cicrano', 'beltrano']; for (var indice in nomes) { document.writeln(nomes[indice]) ;
  • 42. FUNÇÕES • Exemplo: function soma(a, b) { return a + b; } • Exemplo: var maior = function(a, b) { if (a > b) { return a; } else { return b; } } Uma variável com uma função !
  • 43. OBJETOS • Em JavaScript objetos guardam um conjunto de duplas chave-valor • Por exemplo, um objeto vôo pode ter a seguinte chave: horário, com o valor: “18:30”
  • 44. OBJETOS • Objeto vazio: var objeto = {} • Objeto com propriedades: var candidato = { nome: "Manoel da Silva", idade: 28, terceiroGrau: true, cargoPretendido: "Analista de Sistemas" }
  • 45. OBJETOS • Podem ser complexos: var voo = { companhia: "Oceanic", numero: 815, partida: { aeroporto: "SYD", "22/09/2004 14:55", "Sydney" horario: cidade: }, chegada: { aeroporto: "LAX", "23/09/2004 10:42", horario: cidade: "Los Angeles" } }
  • 46. Acessando valores • candidato[“nome”] • candidato.nome • voo.partida.horario
  • 47. Atribuindo valores • candidato.idade = 29 • candidato[‘aprovado’] = false • voo.situacao = ‘Desaparecido’
  • 48. CONSTRUTORES • Um construtor é uma função normal que cria um novo objeto utilizando a variável implícita this • Um construtor deve ser sempre chamado utilizando o comando new
  • 49. CONSTRUTORES function Conta(titular) { this.titular = titular; this.saldo = 0; this.depositar = function(valor) { this.saldo += valor; }; this.sacar = function(valor) { -= valor; this.saldo }; this.transferir = function(outraConta, valor) { this.sacar(valor); outraConta.depositar(valor); } }
  • 50. CONSTRUTORES var c1 = new Conta("Pedro"); var c2 = new Conta("Maria"); c1.depositar(100); c2.depositar(50); c1.transferir(c2, 60); document.writeln(c1.titular + " - R$ " + c1.saldo); document.writeln(c2.titular + " - R$ " + c2.saldo);
  • 51. PROTOTYPE • Todos os objetos estão ligados a um prototype • Os objetos heram suas propriedades deste prototype • Alterando-se o prototype, altera-se todos os objetos ligados a ele • Todos os prototypes herdam de Object.prototype
  • 52. PROTOTYPE Conta.prototype.toString = function() { return this.titular + " - R$ " + this.saldo; }; document.writeln(c1.toString()) ; document.writeln(c2.toString()) ;
  • 53. PROTOTYPE Number.prototype.dinheiro = function() { var valor = "" + this.toFixed(2); valor = valor.replace(".", ","); return "R$ " + valor; } var salario = 649.67; document.writeln(salario.dinheiro());
  • 54. REFLEXÃO • typeof • Retorna um String com o tipo de um valor • Exemplo: document.writeln(typeof Conta); document.writeln(typeof c1); document.writeln(typeof c1.titular); document.writeln(typeof c1.saldo); document.writeln(typeof c1.sacar);
  • 55. REFLEXÃO • É possível utilizar um for para percorrer as propriedades de um objeto: document.writeln("Analisando o objeto c1 ..."); for (propriedade in c1) { if (typeof c1[propriedade] === 'function') { document.writeln(" Metodo: " + propriedade); } else { document.writeln(" Atributo: " + propriedade); } }
  • 56. REFLEXÃO • E se eu quiser criar um método em todos os objetos chamado inspect, que irá mostrar os atributos e métodos dos objetos ?
  • 57. REFLEXÃO // Criação do método inspect Object.prototype.inspect = function() { var str = ""; for (propriedade in this) { tipo = typeof this[propriedade]; var if (tipo === 'function') { str += "Metodo: " + propriedade + "n"; } else { str += "Atributo: " + propriedade + " (" + tipo + ")" + "n"; } } return str; }; // Testando o método inspect document.writeln("c1:n" + c1.inspect()); document.writeln("c2:n" + c2.inspect());
  • 58. EXCEÇÕES • O tratamento de exceções permite a notificação (lançamento) e o tratamento de situações de falha
  • 59. EXCEÇÕES • Lançamento de exceções: • throw valor • Exemplo: ... this.sacar = function(valor) { if (valor > this.saldo) { throw "Saldo Insuficiente"; } this.saldo -= valor; }; ...
  • 60. EXCEÇÕES • Tratamento: var c1 = new Conta("Pedro"); try { c1.sacar(500); } catch (erro) { document.writeln("Erro: " + erro); }
  • 62. Utilize Namespaces • Evite utilizar variáveis globais; • Crie todas as suas variáveis, funções, objetos dentro de namespaces (containers); • Exemplo: var MINHA_APLICACAO = {}; MINHA_APLICACAO.versao = 2.0; MINHA_APLICACAO.Pessoa = function(nome, idade) { this.nome = nome; this.idade = idade; }; MINHA_APLICACAO.pessoas = new Array();
  • 64. JQuery jquery.com • Biblioteca JavaScript mais utilizada • Uma camada acima da API do browser • Simplifica o acesso aos objetos das páginas
  • 65. Instalação • Faça o download do jQuery e copie para seu projeto • OU • Utilize direto de uma CDN • Ex: Google CDN
  • 66. Utilizando a Google CDN <html> <body> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"> </script> src="programa.js"></script> <script </body> </html> programa.html programa.js $(function() { alert("oi"); });
  • 67. JQuery • Ponto de entrada • Todo script JQuery começa com um ponto de entrada que será executado apenas quando a página estiver pronta $(function() { // Ponto de entrada });
  • 68. JQuery • Os elementos de uma página são acessados em JQuery através de seletores • Seletores: • id: $(‘#id’) • classe: $(‘.classe’) • tag: $(‘tag’)
  • 69. Atributos dos Elementos • Um elemento pode ser modificado e consultado através dos seguintes métodos: • attr • removeAttr • val • text • html
  • 70. Eventos • blur • change • click • dblclick • focus • keydown • keypress
  • 71. <html> <body> A <input type="text" id="a"> B <input type="text" id="b"> <button id="mais">+</button> <input type="text" id="resultado"> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.1/jquery.min.js"> </script> <script src="programa.js"> </script> </body> </html> Calculadora programa.html
  • 72. var a = parseFloat($('#a').val()); var b = parseFloat($('#b').val()); var c = a + b; $('#resultado').val(c.toFixed(2)); }); }); Calculadora programa.js $(function() { $('#mais').click(function() {
  • 73. Calculadora CALCULADORA.somar = function(a, b) { var c = a + b; c.toFixed(2); return }; $(function() { $('#mais').click(function() { var a = parseFloat($('#a').val()); var b = parseFloat($('#b').val()); b)); $('#resultado').val(CALCULADORA.somar(a, }); }); programa.js var CALCULADORA = {};
  • 74. O que não vimos • Regex • Outras bibliotecas • ExtJS • YUI • NodeJS