SlideShare uma empresa Scribd logo
JavascriptAvançado Bruno Tavares
Referências
Uma “variável” é um ponteiropara um espaço de memóriaaondealgum valor éarmazenado.
Referênciaspodemser re-alocadas varref= {}; console.log(typeof ref); //object ref  = [1 , 4, 2]; console.log(typeof ref); //object ref=false; console.log(typeof ref); //boolean
varref= {}; {} var ref2 =ref;
varref= {}; {} var ref2 =ref; [1,2,3] ref=[1,2,3];
Referênciasglobais alert('Teste'); window.alert('Teste'); refGlobal='abc'; console.log(window.refGlobal); //abc console.log(window['refGlobal']); //abc
Exercícios //1 var a =3; var b = a; console.log(a); console.log(b); a =9; console.log(a); console.log(b);
Exercícios //2 functionsetName(obj, name){ obj.name= name; } var data = {     name : 'Fulano' }; var copy = data; setName(copy, 'Ciclano'); console.log(copy.name); console.log(data.name);
Exerícios //3 functionsetVariables(){ var a =1;         b =3;       c =4;   } console.log(window.a); console.log(window.b); console.log(window.c); setVariables(); console.log(window.a); console.log(window.b); console.log(window.c);
Objetos
Podemser vistas como Hash Tables, ouconjuntoschave-valor. varconfig= {}; config.expansivel =true; config.altura=200;
Chamamososvalores de propriedades de um objeto. Quandotrata-se de umafunção, chamamos de métodos.
varconfig= { expansivel: true, altura: 200, ehExpansivel: function(){ returnthis.expansivel;     }, getAltura: function()     { returnthis.altura;     } }; config.ehExpansivel(); //true
Funciona com Tudo var hoje =newDate(); hoje.bar='teste'; hoje.foo=function() { alert(this.bar); } hoje.foo(); //teste
JSON Objeto JavaScript emlinguagem literal { total: 2,     dados: [         { nome: "Fulano", idade: 22 },         { nome: "Ciclano", idade: 34 },     ] }
PropriedadesExpando varconfig= {     expanded: false }; config.expanded;    //false config['expanded']; //false
//ReferenceError: Ext is not defined if(Ext){ alert('Ext JS framework included!'); } // bom :) if(window['Ext']){ alert('Ext JS framework included!'); }
var combo   =document.getElementById('my_combo'),      config  = { valueField: 'id' },     data    = { id: 1 }; //má tentativa de acessar data.id. Péssima! combo.value=eval('data. '+config.valueField); // bom :) combo.value=data[config.valueField];
Exercício //1 ... alert(data.total); //10 alert(data.rows[0].id); //3 //2 ... alert(fulano.nome); //Fulano alert(fulano.getNome()); //Fulano //3 var teste1 = {nome: 'Fulano’}     teste2 = {descricao: 'LoremIpsum'}; //... alerta(teste1, 'nome'); //Fulano alerta(teste2, 'descricao'); //LoremIpsum
Funções
FunçõescomoObjetos functiongerarID(){ gerarID.semente++; return gerarID.semente;  } gerarID.semente=0; gerarID(); //1 gerarID(); //2
NotaçõesparaFunção functionfoo(){} == varfoo=function(){};
FunçõesAnônimas varconector=function(conexao) { returnfunction()     { alert(conexao);     }; } varconectorMySQL=conector('connectmysql'); varconectorSQLite=conector('connectsqlite'); conectorMySQL(); //connectmysql conectorSQLite();//connectsqlite
FunçõesAnônimas varexecutaRepeticao=function(repeticao, funcao) { for(var i =0 ; i < repeticao ; i++){ funcao.call();     } } executaRepeticao(2, function(){ alert('teste'); }); //'teste'! 'teste'!
Argumentos functionsoma() { var i =0,         len =arguments.length,         resultado =0; for(; i < len ; i++){         resultado +=arguments[i];     } return resultado; } soma(2); //2 soma(2, 8); //10 soma(1, 2, 4); //7
Invocando varconfig= { mensagem: 'Olá de ' }; vardizNome=function(nome){ alert(this.mensagem+ nome); } dizNome('Fulano'); //undefinedFulano dizNome.call(config, 'Fulano'); //Olá de Fulano dizNome.apply(config, ['Fulano']); //Olá de Fulano
.call vs .apply varfoo=function(a, b, c) { return a + b + c; } //4 parâmetros, scope + n diversos foo.call(this, 1, 2, 3);  //2 parametros, scope + array de diversos foo.apply(this, [1, 2, 3]);
Exercícios //1 … varformataReal=formatadorMonetario('R$'), formataDolar=formatadorMonetario('$'); alert(formataReal(2.3)); //R$2.3 alert(formataDolar(2.3)); //$2.3 //2 … var concatenaHifen = concatenador(' - '),     concatenaPonto = concatenador('.'); //Javascript-Ninja alert(concatenaHifen('JavaScript', 'Ninja'));  //Ext.panel.Panel alert(concatenaPonto('Ext', 'panel', 'Panel'));
Exercícios var data1 = { name : 'AAAAA' },     data2 = { name: 'BBBBB' }; functionsetName(data, name){ this.name= name; } data1.setName = data2.setName =setName; data1.setName(data2, 'FFFFFF'); console.log(data1.name); console.log(data2.name); setName.call(data2, data1, 'GGGGG'); console.log(data1.name); console.log(data2.name); data2.setName.apply(data1, [data2, 'LLLLL']); console.log(data1.name); console.log(data2.name);
FunçõescomoConstrutores functionpessoa(){ } pessoa(); Aparentementeumafunçãocomum. Um simples exemplo de programaçãointerpretada.
FunçõescomoConstrutores functionPessoa(){ } var fulano =newPessoa(); Podeserconsiderado um construtor, apenasadicionandonew
Atributos functionPessoa(nome){ this.nome=nome; } var fulano =newPessoa("Fulano"); alert(fulano.nome); //Fulano
Prototype functionPessoa(nome){ this.nome=nome; } Pessoa.prototype= { dizerOla: function(){ alert('Olá de '+this.nome);     } }; var fulano =newPessoa("Fulano"); fulano.dizerOla(); Prototype podeserconsiderado o corpo da classe. Aondesãoassociadosmétodos e atributos.
Prototype functionPessoa(nome){ this.nome=nome; } var fulano =newPessoa("Fulano"); alert(fulano.dizerOla); //undefined Pessoa.prototype.dizerOla=function(){ alert('Olá de '+this.nome); }; alert(fulano.dizerOla); //function fulano.dizerOla(); //Olá de Fulano Alterar o protótipo de umaclassetêmefeitotambémeminstânciaspreviamentecriadas.
Herança //retorna um objeto com todos métodos de pessoa newPessoa();  //cria nova classe pirada varPirata=function(){}; //herda os métodos de pessoa Pirata.prototype=newPessoa(); //teste var jack =newPirata("Jack"); jack.dizerOla(); //Olá de Jack
Exercício varatleta=newAtleta('Fulano'); alert(atleta.getNome()); //Fulano atleta.setNome('Fulano da Silva'); alert(atleta.getNome()); //Fulano da Silva varjogador=newJogadorFutebol('Ciclano'); alert(jogador.getNome()); //Ciclano jogador.marcarGols(); alert(jogador.getGols()); //1 jogador.marcarGols(2); alert(jogador.getGols()); //3

Mais conteúdo relacionado

Mais procurados

Extending Apache Spark SQL Data Source APIs with Join Push Down with Ioana De...
Extending Apache Spark SQL Data Source APIs with Join Push Down with Ioana De...Extending Apache Spark SQL Data Source APIs with Join Push Down with Ioana De...
Extending Apache Spark SQL Data Source APIs with Join Push Down with Ioana De...
Databricks
 

Mais procurados (20)

Modern JS with ES6
Modern JS with ES6Modern JS with ES6
Modern JS with ES6
 
Spark Summit East 2015 Advanced Devops Student Slides
Spark Summit East 2015 Advanced Devops Student SlidesSpark Summit East 2015 Advanced Devops Student Slides
Spark Summit East 2015 Advanced Devops Student Slides
 
Introduction to REST - API
Introduction to REST - APIIntroduction to REST - API
Introduction to REST - API
 
Image Processing on Delta Lake
Image Processing on Delta LakeImage Processing on Delta Lake
Image Processing on Delta Lake
 
React Native
React NativeReact Native
React Native
 
Advanced Jasmine - Front-End JavaScript Unit Testing
Advanced Jasmine - Front-End JavaScript Unit TestingAdvanced Jasmine - Front-End JavaScript Unit Testing
Advanced Jasmine - Front-End JavaScript Unit Testing
 
Extending Apache Spark SQL Data Source APIs with Join Push Down with Ioana De...
Extending Apache Spark SQL Data Source APIs with Join Push Down with Ioana De...Extending Apache Spark SQL Data Source APIs with Join Push Down with Ioana De...
Extending Apache Spark SQL Data Source APIs with Join Push Down with Ioana De...
 
Node.js Express Framework
Node.js Express FrameworkNode.js Express Framework
Node.js Express Framework
 
REST API
REST APIREST API
REST API
 
MongoDB
MongoDBMongoDB
MongoDB
 
REST-API introduction for developers
REST-API introduction for developersREST-API introduction for developers
REST-API introduction for developers
 
Introdução APIs RESTful
Introdução APIs RESTfulIntrodução APIs RESTful
Introdução APIs RESTful
 
Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...
Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...
Dr. Elephant for Monitoring and Tuning Apache Spark Jobs on Hadoop with Carl ...
 
Express js
Express jsExpress js
Express js
 
Rest assured
Rest assuredRest assured
Rest assured
 
Dive into Catalyst
Dive into CatalystDive into Catalyst
Dive into Catalyst
 
ElasticSearch
ElasticSearchElasticSearch
ElasticSearch
 
Learn REST in 18 Slides
Learn REST in 18 SlidesLearn REST in 18 Slides
Learn REST in 18 Slides
 
Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1Treinamento Elasticsearch - Parte 1
Treinamento Elasticsearch - Parte 1
 
Test your microservices with REST-Assured
Test your microservices with REST-AssuredTest your microservices with REST-Assured
Test your microservices with REST-Assured
 

Destaque

Destaque (10)

Diego Narducci - React + Angular
Diego Narducci - React + AngularDiego Narducci - React + Angular
Diego Narducci - React + Angular
 
Orientação a objetos para dummies - Acoplamento
Orientação a objetos para dummies - AcoplamentoOrientação a objetos para dummies - Acoplamento
Orientação a objetos para dummies - Acoplamento
 
Barroco
BarrocoBarroco
Barroco
 
Performance com AngularJS
Performance com AngularJSPerformance com AngularJS
Performance com AngularJS
 
Aprendendo inteligência pierluigi piazzi
Aprendendo inteligência   pierluigi piazziAprendendo inteligência   pierluigi piazzi
Aprendendo inteligência pierluigi piazzi
 
Propagacao do calor.ppt
Propagacao do calor.pptPropagacao do calor.ppt
Propagacao do calor.ppt
 
7 Myths of formal methods
7 Myths of formal methods7 Myths of formal methods
7 Myths of formal methods
 
Arquiteturas escaláveis o exemplo da spotify aplicado ao e commerce
Arquiteturas escaláveis  o exemplo da spotify aplicado ao e commerceArquiteturas escaláveis  o exemplo da spotify aplicado ao e commerce
Arquiteturas escaláveis o exemplo da spotify aplicado ao e commerce
 
10 more lessons learned from building Machine Learning systems
10 more lessons learned from building Machine Learning systems10 more lessons learned from building Machine Learning systems
10 more lessons learned from building Machine Learning systems
 
Build Features, Not Apps
Build Features, Not AppsBuild Features, Not Apps
Build Features, Not Apps
 

Semelhante a Javascript Avançado

LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
Carlos Santos
 
LabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesLabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - Funções
Carlos Santos
 
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
Carlos Santos
 
A explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoA explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo preto
Nando Vieira
 

Semelhante a Javascript Avançado (20)

JavaScript - De verdade
JavaScript - De verdadeJavaScript - De verdade
JavaScript - De verdade
 
Java script para adultos
Java script para adultosJava script para adultos
Java script para adultos
 
LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09LabMM3 - Aula teórica 09
LabMM3 - Aula teórica 09
 
TDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.JsTDC2016SP - Trilha Node.Js
TDC2016SP - Trilha Node.Js
 
Tutorial JavaFX simples
Tutorial JavaFX simplesTutorial JavaFX simples
Tutorial JavaFX simples
 
Javascript
JavascriptJavascript
Javascript
 
LabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - FunçõesLabMM4 (T13 - 12/13) - Funções
LabMM4 (T13 - 12/13) - Funções
 
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope(A11) LabMM3 - JavaScript - Subalgoritmos e scope
(A11) LabMM3 - JavaScript - Subalgoritmos e scope
 
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)
 
tmn - Introdução ao JavaScript
tmn - Introdução ao JavaScripttmn - Introdução ao JavaScript
tmn - Introdução ao JavaScript
 
Evolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScriptEvolução e futuro do uso de paradigmas no JavaScript
Evolução e futuro do uso de paradigmas no JavaScript
 
Programação functional reativa: lidando com código assíncrono
Programação functional reativa: lidando com código assíncronoProgramação functional reativa: lidando com código assíncrono
Programação functional reativa: lidando com código assíncrono
 
Ganhando tempo com casos de testes
Ganhando tempo com casos de testesGanhando tempo com casos de testes
Ganhando tempo com casos de testes
 
PHP 5.3 - Funções
PHP 5.3 - FunçõesPHP 5.3 - Funções
PHP 5.3 - Funções
 
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
TDC2017 | Florianopolis - Trilha DevOps How we figured out we had a SRE team ...
 
PHP fora da Web
PHP fora da WebPHP fora da Web
PHP fora da Web
 
Shell script
Shell scriptShell script
Shell script
 
A explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoA explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo preto
 
javascript_funcional.pdf
javascript_funcional.pdfjavascript_funcional.pdf
javascript_funcional.pdf
 
Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 

Javascript Avançado

  • 3. Uma “variável” é um ponteiropara um espaço de memóriaaondealgum valor éarmazenado.
  • 4. Referênciaspodemser re-alocadas varref= {}; console.log(typeof ref); //object ref = [1 , 4, 2]; console.log(typeof ref); //object ref=false; console.log(typeof ref); //boolean
  • 5. varref= {}; {} var ref2 =ref;
  • 6. varref= {}; {} var ref2 =ref; [1,2,3] ref=[1,2,3];
  • 7. Referênciasglobais alert('Teste'); window.alert('Teste'); refGlobal='abc'; console.log(window.refGlobal); //abc console.log(window['refGlobal']); //abc
  • 8. Exercícios //1 var a =3; var b = a; console.log(a); console.log(b); a =9; console.log(a); console.log(b);
  • 9. Exercícios //2 functionsetName(obj, name){ obj.name= name; } var data = { name : 'Fulano' }; var copy = data; setName(copy, 'Ciclano'); console.log(copy.name); console.log(data.name);
  • 10. Exerícios //3 functionsetVariables(){ var a =1; b =3; c =4; } console.log(window.a); console.log(window.b); console.log(window.c); setVariables(); console.log(window.a); console.log(window.b); console.log(window.c);
  • 12. Podemser vistas como Hash Tables, ouconjuntoschave-valor. varconfig= {}; config.expansivel =true; config.altura=200;
  • 13. Chamamososvalores de propriedades de um objeto. Quandotrata-se de umafunção, chamamos de métodos.
  • 14. varconfig= { expansivel: true, altura: 200, ehExpansivel: function(){ returnthis.expansivel; }, getAltura: function() { returnthis.altura; } }; config.ehExpansivel(); //true
  • 15. Funciona com Tudo var hoje =newDate(); hoje.bar='teste'; hoje.foo=function() { alert(this.bar); } hoje.foo(); //teste
  • 16. JSON Objeto JavaScript emlinguagem literal { total: 2, dados: [ { nome: "Fulano", idade: 22 }, { nome: "Ciclano", idade: 34 }, ] }
  • 17. PropriedadesExpando varconfig= { expanded: false }; config.expanded; //false config['expanded']; //false
  • 18. //ReferenceError: Ext is not defined if(Ext){ alert('Ext JS framework included!'); } // bom :) if(window['Ext']){ alert('Ext JS framework included!'); }
  • 19. var combo =document.getElementById('my_combo'), config = { valueField: 'id' }, data = { id: 1 }; //má tentativa de acessar data.id. Péssima! combo.value=eval('data. '+config.valueField); // bom :) combo.value=data[config.valueField];
  • 20. Exercício //1 ... alert(data.total); //10 alert(data.rows[0].id); //3 //2 ... alert(fulano.nome); //Fulano alert(fulano.getNome()); //Fulano //3 var teste1 = {nome: 'Fulano’} teste2 = {descricao: 'LoremIpsum'}; //... alerta(teste1, 'nome'); //Fulano alerta(teste2, 'descricao'); //LoremIpsum
  • 22. FunçõescomoObjetos functiongerarID(){ gerarID.semente++; return gerarID.semente; } gerarID.semente=0; gerarID(); //1 gerarID(); //2
  • 24. FunçõesAnônimas varconector=function(conexao) { returnfunction() { alert(conexao); }; } varconectorMySQL=conector('connectmysql'); varconectorSQLite=conector('connectsqlite'); conectorMySQL(); //connectmysql conectorSQLite();//connectsqlite
  • 25. FunçõesAnônimas varexecutaRepeticao=function(repeticao, funcao) { for(var i =0 ; i < repeticao ; i++){ funcao.call(); } } executaRepeticao(2, function(){ alert('teste'); }); //'teste'! 'teste'!
  • 26. Argumentos functionsoma() { var i =0, len =arguments.length, resultado =0; for(; i < len ; i++){ resultado +=arguments[i]; } return resultado; } soma(2); //2 soma(2, 8); //10 soma(1, 2, 4); //7
  • 27. Invocando varconfig= { mensagem: 'Olá de ' }; vardizNome=function(nome){ alert(this.mensagem+ nome); } dizNome('Fulano'); //undefinedFulano dizNome.call(config, 'Fulano'); //Olá de Fulano dizNome.apply(config, ['Fulano']); //Olá de Fulano
  • 28. .call vs .apply varfoo=function(a, b, c) { return a + b + c; } //4 parâmetros, scope + n diversos foo.call(this, 1, 2, 3); //2 parametros, scope + array de diversos foo.apply(this, [1, 2, 3]);
  • 29. Exercícios //1 … varformataReal=formatadorMonetario('R$'), formataDolar=formatadorMonetario('$'); alert(formataReal(2.3)); //R$2.3 alert(formataDolar(2.3)); //$2.3 //2 … var concatenaHifen = concatenador(' - '), concatenaPonto = concatenador('.'); //Javascript-Ninja alert(concatenaHifen('JavaScript', 'Ninja')); //Ext.panel.Panel alert(concatenaPonto('Ext', 'panel', 'Panel'));
  • 30. Exercícios var data1 = { name : 'AAAAA' }, data2 = { name: 'BBBBB' }; functionsetName(data, name){ this.name= name; } data1.setName = data2.setName =setName; data1.setName(data2, 'FFFFFF'); console.log(data1.name); console.log(data2.name); setName.call(data2, data1, 'GGGGG'); console.log(data1.name); console.log(data2.name); data2.setName.apply(data1, [data2, 'LLLLL']); console.log(data1.name); console.log(data2.name);
  • 31. FunçõescomoConstrutores functionpessoa(){ } pessoa(); Aparentementeumafunçãocomum. Um simples exemplo de programaçãointerpretada.
  • 32. FunçõescomoConstrutores functionPessoa(){ } var fulano =newPessoa(); Podeserconsiderado um construtor, apenasadicionandonew
  • 33. Atributos functionPessoa(nome){ this.nome=nome; } var fulano =newPessoa("Fulano"); alert(fulano.nome); //Fulano
  • 34. Prototype functionPessoa(nome){ this.nome=nome; } Pessoa.prototype= { dizerOla: function(){ alert('Olá de '+this.nome); } }; var fulano =newPessoa("Fulano"); fulano.dizerOla(); Prototype podeserconsiderado o corpo da classe. Aondesãoassociadosmétodos e atributos.
  • 35. Prototype functionPessoa(nome){ this.nome=nome; } var fulano =newPessoa("Fulano"); alert(fulano.dizerOla); //undefined Pessoa.prototype.dizerOla=function(){ alert('Olá de '+this.nome); }; alert(fulano.dizerOla); //function fulano.dizerOla(); //Olá de Fulano Alterar o protótipo de umaclassetêmefeitotambémeminstânciaspreviamentecriadas.
  • 36. Herança //retorna um objeto com todos métodos de pessoa newPessoa(); //cria nova classe pirada varPirata=function(){}; //herda os métodos de pessoa Pirata.prototype=newPessoa(); //teste var jack =newPirata("Jack"); jack.dizerOla(); //Olá de Jack
  • 37. Exercício varatleta=newAtleta('Fulano'); alert(atleta.getNome()); //Fulano atleta.setNome('Fulano da Silva'); alert(atleta.getNome()); //Fulano da Silva varjogador=newJogadorFutebol('Ciclano'); alert(jogador.getNome()); //Ciclano jogador.marcarGols(); alert(jogador.getGols()); //1 jogador.marcarGols(2); alert(jogador.getGols()); //3