SlideShare uma empresa Scribd logo
1 de 73
Antes de começar...
> typeof NaN === "number" true >
> "1" == 1 true > "1" === 1 false >
> typeof [] 'object' > Object.prototype.toString.call([]) '[object Array]'
Tipos dinâmicos
Tipos fracos Tipos dinâmicos
Tipos fracos Tipos dinâmicos Orientado a protótipos
Tipos fracos Tipos dinâmicos Orientado a protótipos Não tem classes
Tipos fracos Tipos dinâmicos Orientado a protótipos Não tem classes Não tem interfaces
Tipos fracos Tipos dinâmicos Orientado a protótipos Não tem classes Não tem interfaces Não tem packages
Tipos fracos Tipos dinâmicos Orientado a protótipos Não tem classes Não tem interfaces Não tem packages Não tem contexto Private
Tipos fracos Tipos dinâmicos Orientado a protótipos Não tem classes Não tem interfaces Não tem packages Não tem contexto Private Não tem contexto Protected
Não tem métodos
ECMA 262, 3rd Edition, December 1999), página 2 (4.2): "An ECMAScript object is an unordered collection of properties each with zero or more attributes..."
ECMA 262, 3rd Edition, December 1999), página 2 (4.2): "...  and a method is a function associated with an object via a property. "
ECMA 262, 5.1 Edition, June 2011), página 2 (4.2): "…  A function that is associated with an object via a property is a  method . "
ECMA 262, 5.1 Edition, June 2011), página 2 (4.2): "…  A function that is associated with an object via a property is a  method . " ECMA 262, 3rd Edition, December 1999), página 2 (4.2): "...  and a method is a function associated with an object via a property. "
Objeto Literal > var objeto = { ... propriedade: "Propriedade" ... } > objeto { propriedade:  'Propriedade'  } >
Objeto Literal > var objeto = { ... propriedade: "Propriedade" ... } > objeto { propriedade:  'Propriedade'  } > JSON?
Tudo é objeto? > 1.0.toString(); '1' >
Tudo é objeto? > 1.toString(); ...
Tudo é objeto?
Feita em 10 dias
https://twitter.com/#!/diveintomark/status/112607722704343040
Como se divertir com uma linguagem dessas?
Combinando Programação funcional e Orientação a Objetos em Javascript de forma prática e divertida @cmilfont Beaga JS Beozonte 2012
Minimalismo e Simplicidade
> var empresa = { ... denominacaoSocial:  "Milfont Evil Corp" ... } > empresa.cnpj ===  "9999999999999"  } false >
> var empresa = { ... denominacaoSocial:  "Milfont Evil Corp" ... } > empresa.cnpj ===  "9999999999999"  } false > empresa.endereco.sede === "Capitolio" TypeError: Cannot read property 'sede' of undefined
> if(empresa.endereco &&  empresa.endereco.sede &&  empresa.endereco.sede.numero === "Capitolio")
ruby-1.8.7-p330 :012 > empresa.try(:endereco).try(:sede) => nil ruby-1.8.7-p330 :012 > empresa.try(:endereco).try(:sede) == "teste" => false
> Object.prototype.try = function(){}; > empresa.try("empresa.endereco.sede.numero");
> Object. prototype .try = function(){}; > empresa.try("empresa.endereco.sede.numero");
Object.defineProperty(Object.prototype,  "try",  { value: function(){} } );
Object. defineProperty (Object.prototype,  "try",  { value: function(){} } );
Problemas de Extender built-in https://github.com/kriskowal/es5-shim
Object.defineProperty(Object.prototype,  "try",  { value: function(){} } );
Object.defineProperty(Object.prototype,  " try ",  { value: function(){} } );
Object.defineProperty(Object.prototype,  "try ing ",  { value: function(){} } );
var markup = &quot;<div id=amp;quot;&quot;  +  id  +  &quot;amp;quot;> </div>&quot;;
markup = &quot;<div id=amp;quot; #{id} amp;quot;> </div>&quot;;
var  markup = &quot;<div id=amp;quot; #{id} amp;quot;> </div>&quot;;
Object.defineProperty(String.prototype,   'interpolate', { enumerable:   false , value:   function (values, pattern) { var   pattrn = pattern ||   /([^}]+)/g ; return   this .replace(pattrn,   function (match, value){ var   result = values[value]; return  (result)? result: &quot;&quot;; }); } });
https://github.com/documentcloud/underscore
DRY
var empresa = { nome:   $(&quot;input#nome&quot;) , endereco:   $(&quot;input#endereco&quot;) }); jQuery.ajax({  data  : empresa, cache  : false, dataType  : 'json', error  : error, contentType : &quot;application/json&quot;, headers  : {&quot;Content-Type&quot;:&quot;application/json&quot;,  &quot;Accept&quot;:&quot;application/json&quot;}, success  : callback, type  : &quot;POST&quot;, url  : &quot;/empresas&quot; });
var empresa = { nome:   $(&quot;input#nome&quot;) , endereco:   $(&quot;input#endereco&quot;) }); jQuery.ajax({  data  : empresa, cache  : false, dataType  : 'json', error  : error, contentType : &quot;application/json&quot;, headers  : {&quot;Content-Type&quot;:&quot;application/json&quot;,  &quot;Accept&quot;:&quot;application/json&quot;}, success  : callback, type  : &quot; POST &quot;, url  : &quot; /empresas &quot; });
class   EmpresasController   <   ApplicationController end jQuery.ajax({  data  : empresa, type  : &quot; POST &quot;, url  : &quot; /empresas &quot; });
class   EmpresasController   <   ApplicationController end rake routes POST /empresas(.:format) {:action=>&quot;create&quot;, :controller=>&quot;empresas&quot;} jQuery.ajax({  data  : empresa, type  : &quot; POST &quot;, url  : &quot; /empresas &quot; });
class   EmpresasController   <   ApplicationController end rake routes POST   /empresas (.:format) {:action=>&quot; create &quot;, :controller=>&quot; empresas &quot;} jQuery.ajax({  data  : empresa, type  : &quot; POST &quot;, url  : &quot; /empresas &quot; });
class   EmpresasController   <   ApplicationController end rake routes POST   /empresas (.:format) {:action=>&quot; create &quot;, :controller=>&quot; empresas &quot;} var empresas = new  EmpresasController empresas. create ( empresa , callback) jQuery.ajax({  data  : empresa, type  : &quot; POST &quot;, url  : &quot; /empresas &quot; });
var empresa = { nome:   $(&quot;input#nome&quot;) , endereco:   $(&quot;input#endereco&quot;) }); jQuery.ajax({  data  : empresa, cache  : false, dataType  : 'json', error  : error, contentType : &quot;application/json&quot;, headers  : {&quot;Content-Type&quot;:&quot;application/json&quot;,  &quot;Accept&quot;:&quot;application/json&quot;}, success  : callback, type  : &quot;POST&quot;, url  : &quot;/empresas&quot; });
var empresa = { nome:   $(&quot;input#nome&quot;) , endereco:   $(&quot;input#endereco&quot;) }); var empresas = new  EmpresasController empresas. create ( empresa , callback)
var empresas = new  EmpresasController empresas. create ( empresa , callback); function EmpresasController() { this.create = function(){}; }
var empresas = new  EmpresasController empresas. create ( empresa , callback); var Interface = { this.routes = { action : { url:  &quot;/controller&quot; , method:  &quot;POST&quot; } };
var empresas = new  EmpresasController empresas. create ( empresa , callback); function EmpresasController() { this.create = function(){}; } var Interface = { this.routes = { action : { url:  &quot;/controller&quot; , method:  &quot;POST&quot; } };
var empresas = new  EmpresasController empresas. create ( empresa , callback); function EmpresasController() { } EmpresasController. prototype  = DJR; var Interface = { this.routes = { action : { url:  &quot;/controller&quot; , method:  &quot;POST&quot; } };
function EmpresasController() { } EmpresasController. prototype  = DJR;
function EmpresasController() { DJR.call(this); }
function EmpresasController() { this.useDJR = DJR; this.userDJR(); }
function EmpresasController() { DJR.call(this); } var InterfaceDJR = function(){ this.routes = { create : { url:  &quot;/controller&quot; , method:  &quot;POST&quot; } } }; EmpresasController.prototype = InterfaceDJR;
function EmpresasController() { DJR.call(this); } var DJR = function() { this .ajax = function(object, callback, error, method, url, params) { jQuery.ajax({ context  : self, data  : object, cache  : false, dataType  : 'json', error  : error, success  : callback, type  : method, url  : url }); }; };
var DJR = function() { this.ajax = function(action, args) { var json = args[0]; var callback = args[1]; $.ajax({ url: this.route[action].url, type: this.route[action].method, data: JSON.stringify(json) }); } this. __noSuchMethod__  = function(){ this.ajax(arguments[0],  arguments[1]); } };
var DJR = function() { }; DJR.algumMetodo = function(){}; DJR['algumMetodo'] = function(){};
var DJR = function() { this.ajax = function(action, args) {  } for (var action in this.route) { this[action] = function() { this.ajax(act,arguments); } }; };
 
var DJR = function() { this.ajax = function(action, args) {  } for (var action in this.route) { this[action] = function( act ){ return function() { this.ajax(act,arguments); } } (action) ; }; };
var empresa = { nome:   $(&quot;input#nome&quot;) , endereco:   $(&quot;input#endereco&quot;) }); var empresas = new  EmpresasController empresas. create ( empresa , callback)
var empresa =  $(&quot;form#empresas&quot;).getJSON() ; var empresas = new  EmpresasController empresas. create ( empresa , callback)
sammy.post('#empresas', function() { var empresa =  $(&quot;form#empresas&quot;).getJSON() ; new  EmpresasController() . create ( empresa , callback) });
var valorDosDebitos =  lancamento.partidas .filter(function(partida){     return partida.natureza ===  Partida.DEBITO;     }).map(function(partida){     return partida.valor;     }).reduce(function(previousValue, currentValue, index, array){ return previousValue +  currentValue; }, 0);
https://github.com/milfont
http://www.egenial.pro/pt/extjs

Mais conteúdo relacionado

Mais procurados

Javascript - Princípios da linguagem e utilização de frameworks
Javascript - Princípios da linguagem e utilização de frameworksJavascript - Princípios da linguagem e utilização de frameworks
Javascript - Princípios da linguagem e utilização de frameworksBruno Abrantes
 
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBJQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBLuciano Borges
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o JavascriptMichel Ribeiro
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicaçãoAntonio Spinelli
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend FrameworkJaime Neto
 
(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE PoliglotaPhil Calçado
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesOtávio Calaça Xavier
 
Gerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para PythonGerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para PythonMarcelo Lira
 

Mais procurados (19)

Java script aula 02 - operadores
Java script   aula 02 - operadoresJava script   aula 02 - operadores
Java script aula 02 - operadores
 
Javascript - Princípios da linguagem e utilização de frameworks
Javascript - Princípios da linguagem e utilização de frameworksJavascript - Princípios da linguagem e utilização de frameworks
Javascript - Princípios da linguagem e utilização de frameworks
 
Ecommerce, mais simples do que parece
Ecommerce, mais simples do que pareceEcommerce, mais simples do que parece
Ecommerce, mais simples do que parece
 
JQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEBJQuery Alagoinhas Dev Day - UNEB
JQuery Alagoinhas Dev Day - UNEB
 
Evento Front End SP - Organizando o Javascript
 Evento Front End SP - Organizando o Javascript Evento Front End SP - Organizando o Javascript
Evento Front End SP - Organizando o Javascript
 
Java script aula 08 - formulários
Java script   aula 08 - formuláriosJava script   aula 08 - formulários
Java script aula 08 - formulários
 
modernizando a arquitertura de sua aplicação
modernizando a arquitertura  de sua aplicaçãomodernizando a arquitertura  de sua aplicação
modernizando a arquitertura de sua aplicação
 
PHP robusto com Zend Framework
PHP robusto com Zend FrameworkPHP robusto com Zend Framework
PHP robusto com Zend Framework
 
Html dom, eventos, jquery
Html dom, eventos, jqueryHtml dom, eventos, jquery
Html dom, eventos, jquery
 
(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota(Portuguese) Java EE Poliglota
(Portuguese) Java EE Poliglota
 
Object Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simplesObject Calisthenics: relaxe e escreva códigos simples
Object Calisthenics: relaxe e escreva códigos simples
 
jQuery Simplificando o JavaScript
jQuery Simplificando o JavaScriptjQuery Simplificando o JavaScript
jQuery Simplificando o JavaScript
 
Node.js: serious business
Node.js: serious businessNode.js: serious business
Node.js: serious business
 
Java script aula 07 - eventos
Java script   aula 07 - eventosJava script   aula 07 - eventos
Java script aula 07 - eventos
 
Php 08 Oo
Php 08 OoPhp 08 Oo
Php 08 Oo
 
Spring Capitulo 03
Spring Capitulo 03Spring Capitulo 03
Spring Capitulo 03
 
Gerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para PythonGerando bindings de bibliotecas C++ para Python
Gerando bindings de bibliotecas C++ para Python
 
Introdução ao JQuery e AJAX
Introdução ao JQuery e AJAXIntrodução ao JQuery e AJAX
Introdução ao JQuery e AJAX
 
Programação Web com jQuery
Programação Web com jQueryProgramação Web com jQuery
Programação Web com jQuery
 

Semelhante a Beagajs

Java mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebJava mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebBruno Borges
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Bruno Borges
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryHarlley Oliveira
 
03 - Formulários &amp; Dados
03 - Formulários &amp; Dados03 - Formulários &amp; Dados
03 - Formulários &amp; DadosMarcio Marinho
 
Lib.SAPO.JS - Codebits2007
Lib.SAPO.JS  - Codebits2007Lib.SAPO.JS  - Codebits2007
Lib.SAPO.JS - Codebits2007Claudio Gamboa
 
Html5 - O futuro da Web
Html5 - O futuro da WebHtml5 - O futuro da Web
Html5 - O futuro da WebJose Berardo
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage apiSuissa
 
Prototype Framework Javascript
Prototype Framework JavascriptPrototype Framework Javascript
Prototype Framework JavascriptMarcio Romu
 
2009 05 20 Floripa Flex
2009 05 20 Floripa Flex2009 05 20 Floripa Flex
2009 05 20 Floripa FlexEduardo Kraus
 
uma história sobre testes de API
uma história sobre testes de APIuma história sobre testes de API
uma história sobre testes de APISamuel Lourenço
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGiljefesrodrigues
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated QueryDalton Valadares
 
Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007Jaime Schettini
 

Semelhante a Beagajs (20)

Java mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento WebJava mais ágil que nunca no desenvolvimento Web
Java mais ágil que nunca no desenvolvimento Web
 
Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6Apps Web em Wicket e Scala no GlassFish Java EE 6
Apps Web em Wicket e Scala no GlassFish Java EE 6
 
Melhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQueryMelhorando a Experiência do Usuário com JavaScript e jQuery
Melhorando a Experiência do Usuário com JavaScript e jQuery
 
nDeveloper Framework
nDeveloper FrameworknDeveloper Framework
nDeveloper Framework
 
Uma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDBUma Breve Introdução ao MongoDB
Uma Breve Introdução ao MongoDB
 
03 - Formulários &amp; Dados
03 - Formulários &amp; Dados03 - Formulários &amp; Dados
03 - Formulários &amp; Dados
 
Spring Capitulo 02
Spring Capitulo 02Spring Capitulo 02
Spring Capitulo 02
 
Lib.SAPO.JS - Codebits2007
Lib.SAPO.JS  - Codebits2007Lib.SAPO.JS  - Codebits2007
Lib.SAPO.JS - Codebits2007
 
Html5 - O futuro da Web
Html5 - O futuro da WebHtml5 - O futuro da Web
Html5 - O futuro da Web
 
Html5 storage api
Html5 storage apiHtml5 storage api
Html5 storage api
 
Tutorial Dwr - Combos Dependentes
Tutorial Dwr - Combos DependentesTutorial Dwr - Combos Dependentes
Tutorial Dwr - Combos Dependentes
 
Ajax em java
Ajax em javaAjax em java
Ajax em java
 
Prototype Framework Javascript
Prototype Framework JavascriptPrototype Framework Javascript
Prototype Framework Javascript
 
2009 05 20 Floripa Flex
2009 05 20 Floripa Flex2009 05 20 Floripa Flex
2009 05 20 Floripa Flex
 
uma história sobre testes de API
uma história sobre testes de APIuma história sobre testes de API
uma história sobre testes de API
 
Facelets
FaceletsFacelets
Facelets
 
Puppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGilPuppet – Torne Seu Datacenter áGil
Puppet – Torne Seu Datacenter áGil
 
LINQ - Language Integrated Query
LINQ - Language Integrated QueryLINQ - Language Integrated Query
LINQ - Language Integrated Query
 
Wicket 2008
Wicket 2008Wicket 2008
Wicket 2008
 
Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007Conhecendo o Struts 2 - Java Tech Day 2007
Conhecendo o Struts 2 - Java Tech Day 2007
 

Mais de Milfont Consulting

Continuous integration e continuous delivery para salvar o seu projeto!
Continuous integration e continuous delivery para salvar o seu projeto!Continuous integration e continuous delivery para salvar o seu projeto!
Continuous integration e continuous delivery para salvar o seu projeto!Milfont Consulting
 
Equipes sem Líderes formais e realmente autogeridas
Equipes sem Líderes formais e realmente autogeridasEquipes sem Líderes formais e realmente autogeridas
Equipes sem Líderes formais e realmente autogeridasMilfont Consulting
 
Engine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML SpritesEngine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML SpritesMilfont Consulting
 
I TDD my jQuery code without Browser
I TDD my jQuery code without BrowserI TDD my jQuery code without Browser
I TDD my jQuery code without BrowserMilfont Consulting
 
Construindo WebApps ricas com Rails e Sencha
Construindo WebApps ricas com Rails e SenchaConstruindo WebApps ricas com Rails e Sencha
Construindo WebApps ricas com Rails e SenchaMilfont Consulting
 
BDD com Cucumber, Selenium e Rails
BDD com Cucumber, Selenium e RailsBDD com Cucumber, Selenium e Rails
BDD com Cucumber, Selenium e RailsMilfont Consulting
 
Apresentando Extreme Programming
Apresentando Extreme ProgrammingApresentando Extreme Programming
Apresentando Extreme ProgrammingMilfont Consulting
 

Mais de Milfont Consulting (20)

Continuous integration e continuous delivery para salvar o seu projeto!
Continuous integration e continuous delivery para salvar o seu projeto!Continuous integration e continuous delivery para salvar o seu projeto!
Continuous integration e continuous delivery para salvar o seu projeto!
 
Equipes sem Líderes formais e realmente autogeridas
Equipes sem Líderes formais e realmente autogeridasEquipes sem Líderes formais e realmente autogeridas
Equipes sem Líderes formais e realmente autogeridas
 
Mvc sem Controller
Mvc sem ControllerMvc sem Controller
Mvc sem Controller
 
Engine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML SpritesEngine de template em Javascript com HTML Sprites
Engine de template em Javascript com HTML Sprites
 
MVC Model 3
MVC Model 3MVC Model 3
MVC Model 3
 
Dar caos à ordem
Dar caos à ordemDar caos à ordem
Dar caos à ordem
 
I TDD my jQuery code without Browser
I TDD my jQuery code without BrowserI TDD my jQuery code without Browser
I TDD my jQuery code without Browser
 
Oxente BDD
Oxente BDDOxente BDD
Oxente BDD
 
Construindo WebApps ricas com Rails e Sencha
Construindo WebApps ricas com Rails e SenchaConstruindo WebApps ricas com Rails e Sencha
Construindo WebApps ricas com Rails e Sencha
 
Dar Ordem ao Caos
Dar Ordem ao CaosDar Ordem ao Caos
Dar Ordem ao Caos
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
BDD com Cucumber, Selenium e Rails
BDD com Cucumber, Selenium e RailsBDD com Cucumber, Selenium e Rails
BDD com Cucumber, Selenium e Rails
 
Mare de Agilidade - BDD e TDD
Mare de Agilidade - BDD e TDDMare de Agilidade - BDD e TDD
Mare de Agilidade - BDD e TDD
 
Apresentando Extreme Programming
Apresentando Extreme ProgrammingApresentando Extreme Programming
Apresentando Extreme Programming
 
Test Driven Development
Test Driven DevelopmentTest Driven Development
Test Driven Development
 
Behaviour Driven Development
Behaviour Driven DevelopmentBehaviour Driven Development
Behaviour Driven Development
 
Primeiro Dia Livre Opensocial
Primeiro Dia Livre OpensocialPrimeiro Dia Livre Opensocial
Primeiro Dia Livre Opensocial
 
Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01Tw Dwr 2007 Ap01
Tw Dwr 2007 Ap01
 
Course Hibernate 2008
Course Hibernate 2008Course Hibernate 2008
Course Hibernate 2008
 
Opensocial
OpensocialOpensocial
Opensocial
 

Beagajs

  • 2. > typeof NaN === &quot;number&quot; true >
  • 3. > &quot;1&quot; == 1 true > &quot;1&quot; === 1 false >
  • 4. > typeof [] 'object' > Object.prototype.toString.call([]) '[object Array]'
  • 6. Tipos fracos Tipos dinâmicos
  • 7. Tipos fracos Tipos dinâmicos Orientado a protótipos
  • 8. Tipos fracos Tipos dinâmicos Orientado a protótipos Não tem classes
  • 9. Tipos fracos Tipos dinâmicos Orientado a protótipos Não tem classes Não tem interfaces
  • 10. Tipos fracos Tipos dinâmicos Orientado a protótipos Não tem classes Não tem interfaces Não tem packages
  • 11. Tipos fracos Tipos dinâmicos Orientado a protótipos Não tem classes Não tem interfaces Não tem packages Não tem contexto Private
  • 12. Tipos fracos Tipos dinâmicos Orientado a protótipos Não tem classes Não tem interfaces Não tem packages Não tem contexto Private Não tem contexto Protected
  • 14. ECMA 262, 3rd Edition, December 1999), página 2 (4.2): &quot;An ECMAScript object is an unordered collection of properties each with zero or more attributes...&quot;
  • 15. ECMA 262, 3rd Edition, December 1999), página 2 (4.2): &quot;... and a method is a function associated with an object via a property. &quot;
  • 16. ECMA 262, 5.1 Edition, June 2011), página 2 (4.2): &quot;… A function that is associated with an object via a property is a method . &quot;
  • 17. ECMA 262, 5.1 Edition, June 2011), página 2 (4.2): &quot;… A function that is associated with an object via a property is a method . &quot; ECMA 262, 3rd Edition, December 1999), página 2 (4.2): &quot;... and a method is a function associated with an object via a property. &quot;
  • 18. Objeto Literal > var objeto = { ... propriedade: &quot;Propriedade&quot; ... } > objeto { propriedade: 'Propriedade' } >
  • 19. Objeto Literal > var objeto = { ... propriedade: &quot;Propriedade&quot; ... } > objeto { propriedade: 'Propriedade' } > JSON?
  • 20. Tudo é objeto? > 1.0.toString(); '1' >
  • 21. Tudo é objeto? > 1.toString(); ...
  • 23. Feita em 10 dias
  • 25. Como se divertir com uma linguagem dessas?
  • 26. Combinando Programação funcional e Orientação a Objetos em Javascript de forma prática e divertida @cmilfont Beaga JS Beozonte 2012
  • 28. > var empresa = { ... denominacaoSocial: &quot;Milfont Evil Corp&quot; ... } > empresa.cnpj === &quot;9999999999999&quot; } false >
  • 29. > var empresa = { ... denominacaoSocial: &quot;Milfont Evil Corp&quot; ... } > empresa.cnpj === &quot;9999999999999&quot; } false > empresa.endereco.sede === &quot;Capitolio&quot; TypeError: Cannot read property 'sede' of undefined
  • 30. > if(empresa.endereco && empresa.endereco.sede && empresa.endereco.sede.numero === &quot;Capitolio&quot;)
  • 31. ruby-1.8.7-p330 :012 > empresa.try(:endereco).try(:sede) => nil ruby-1.8.7-p330 :012 > empresa.try(:endereco).try(:sede) == &quot;teste&quot; => false
  • 32. > Object.prototype.try = function(){}; > empresa.try(&quot;empresa.endereco.sede.numero&quot;);
  • 33. > Object. prototype .try = function(){}; > empresa.try(&quot;empresa.endereco.sede.numero&quot;);
  • 35. Object. defineProperty (Object.prototype, &quot;try&quot;, { value: function(){} } );
  • 36. Problemas de Extender built-in https://github.com/kriskowal/es5-shim
  • 38. Object.defineProperty(Object.prototype, &quot; try &quot;, { value: function(){} } );
  • 39. Object.defineProperty(Object.prototype, &quot;try ing &quot;, { value: function(){} } );
  • 40. var markup = &quot;<div id=amp;quot;&quot; + id + &quot;amp;quot;> </div>&quot;;
  • 41. markup = &quot;<div id=amp;quot; #{id} amp;quot;> </div>&quot;;
  • 42. var markup = &quot;<div id=amp;quot; #{id} amp;quot;> </div>&quot;;
  • 43. Object.defineProperty(String.prototype, 'interpolate', { enumerable: false , value: function (values, pattern) { var pattrn = pattern || /([^}]+)/g ; return this .replace(pattrn, function (match, value){ var result = values[value]; return (result)? result: &quot;&quot;; }); } });
  • 45. DRY
  • 46. var empresa = { nome: $(&quot;input#nome&quot;) , endereco: $(&quot;input#endereco&quot;) }); jQuery.ajax({ data : empresa, cache : false, dataType : 'json', error : error, contentType : &quot;application/json&quot;, headers : {&quot;Content-Type&quot;:&quot;application/json&quot;, &quot;Accept&quot;:&quot;application/json&quot;}, success : callback, type : &quot;POST&quot;, url : &quot;/empresas&quot; });
  • 47. var empresa = { nome: $(&quot;input#nome&quot;) , endereco: $(&quot;input#endereco&quot;) }); jQuery.ajax({ data : empresa, cache : false, dataType : 'json', error : error, contentType : &quot;application/json&quot;, headers : {&quot;Content-Type&quot;:&quot;application/json&quot;, &quot;Accept&quot;:&quot;application/json&quot;}, success : callback, type : &quot; POST &quot;, url : &quot; /empresas &quot; });
  • 48. class EmpresasController < ApplicationController end jQuery.ajax({ data : empresa, type : &quot; POST &quot;, url : &quot; /empresas &quot; });
  • 49. class EmpresasController < ApplicationController end rake routes POST /empresas(.:format) {:action=>&quot;create&quot;, :controller=>&quot;empresas&quot;} jQuery.ajax({ data : empresa, type : &quot; POST &quot;, url : &quot; /empresas &quot; });
  • 50. class EmpresasController < ApplicationController end rake routes POST /empresas (.:format) {:action=>&quot; create &quot;, :controller=>&quot; empresas &quot;} jQuery.ajax({ data : empresa, type : &quot; POST &quot;, url : &quot; /empresas &quot; });
  • 51. class EmpresasController < ApplicationController end rake routes POST /empresas (.:format) {:action=>&quot; create &quot;, :controller=>&quot; empresas &quot;} var empresas = new EmpresasController empresas. create ( empresa , callback) jQuery.ajax({ data : empresa, type : &quot; POST &quot;, url : &quot; /empresas &quot; });
  • 52. var empresa = { nome: $(&quot;input#nome&quot;) , endereco: $(&quot;input#endereco&quot;) }); jQuery.ajax({ data : empresa, cache : false, dataType : 'json', error : error, contentType : &quot;application/json&quot;, headers : {&quot;Content-Type&quot;:&quot;application/json&quot;, &quot;Accept&quot;:&quot;application/json&quot;}, success : callback, type : &quot;POST&quot;, url : &quot;/empresas&quot; });
  • 53. var empresa = { nome: $(&quot;input#nome&quot;) , endereco: $(&quot;input#endereco&quot;) }); var empresas = new EmpresasController empresas. create ( empresa , callback)
  • 54. var empresas = new EmpresasController empresas. create ( empresa , callback); function EmpresasController() { this.create = function(){}; }
  • 55. var empresas = new EmpresasController empresas. create ( empresa , callback); var Interface = { this.routes = { action : { url: &quot;/controller&quot; , method: &quot;POST&quot; } };
  • 56. var empresas = new EmpresasController empresas. create ( empresa , callback); function EmpresasController() { this.create = function(){}; } var Interface = { this.routes = { action : { url: &quot;/controller&quot; , method: &quot;POST&quot; } };
  • 57. var empresas = new EmpresasController empresas. create ( empresa , callback); function EmpresasController() { } EmpresasController. prototype = DJR; var Interface = { this.routes = { action : { url: &quot;/controller&quot; , method: &quot;POST&quot; } };
  • 58. function EmpresasController() { } EmpresasController. prototype = DJR;
  • 59. function EmpresasController() { DJR.call(this); }
  • 60. function EmpresasController() { this.useDJR = DJR; this.userDJR(); }
  • 61. function EmpresasController() { DJR.call(this); } var InterfaceDJR = function(){ this.routes = { create : { url: &quot;/controller&quot; , method: &quot;POST&quot; } } }; EmpresasController.prototype = InterfaceDJR;
  • 62. function EmpresasController() { DJR.call(this); } var DJR = function() { this .ajax = function(object, callback, error, method, url, params) { jQuery.ajax({ context : self, data : object, cache : false, dataType : 'json', error : error, success : callback, type : method, url : url }); }; };
  • 63. var DJR = function() { this.ajax = function(action, args) { var json = args[0]; var callback = args[1]; $.ajax({ url: this.route[action].url, type: this.route[action].method, data: JSON.stringify(json) }); } this. __noSuchMethod__ = function(){ this.ajax(arguments[0], arguments[1]); } };
  • 64. var DJR = function() { }; DJR.algumMetodo = function(){}; DJR['algumMetodo'] = function(){};
  • 65. var DJR = function() { this.ajax = function(action, args) { } for (var action in this.route) { this[action] = function() { this.ajax(act,arguments); } }; };
  • 66.  
  • 67. var DJR = function() { this.ajax = function(action, args) { } for (var action in this.route) { this[action] = function( act ){ return function() { this.ajax(act,arguments); } } (action) ; }; };
  • 68. var empresa = { nome: $(&quot;input#nome&quot;) , endereco: $(&quot;input#endereco&quot;) }); var empresas = new EmpresasController empresas. create ( empresa , callback)
  • 69. var empresa = $(&quot;form#empresas&quot;).getJSON() ; var empresas = new EmpresasController empresas. create ( empresa , callback)
  • 70. sammy.post('#empresas', function() { var empresa = $(&quot;form#empresas&quot;).getJSON() ; new EmpresasController() . create ( empresa , callback) });
  • 71. var valorDosDebitos = lancamento.partidas .filter(function(partida){ return partida.natureza === Partida.DEBITO; }).map(function(partida){ return partida.valor; }).reduce(function(previousValue, currentValue, index, array){ return previousValue + currentValue; }, 0);