SlideShare una empresa de Scribd logo
1 de 99
Descargar para leer sin conexión
Dominando
JavaScript
por David Avellaneda
@davsket
@davsket?
acerca de mi
• Ingeniero de Sistemas…
• Cofundador de monoku y monomi.co
• Co-organizador de BogotáJS
• Co-organizador de JSConf.co
Agenda
Agenda
• JavaScript: Las partes buenas
• JavaScript Orientado a Objetos (OO)
• Closures, Mixins, Objetos, Prototipos
• Patrones de Diseño y MV*
• APIs Rest, AJAX y Sockets (*)
JavaScript:
Las Partes Buenas
Recomendación:
Compren el Libro
Las Partes Buenas?
JavaScript: The Good Parts
80% Intro a JS
2% Hermosas características
10% Feas características
10% Malas partes
Las Partes Feas
Scope
var a = 5, b = 10
!
function noGlobal( a ){
var b = 3
a = a*2
return a * b
}
!
noGlobal( 1 ) // 6
a // 5
b // 3
typeof
typeof new Number(8) == "object"
typeof 8 == "number"
parseInt
parseInt
¡cuidado con los legacy browsers!
parseInt( "08" ) // 0
parseInt( "08", 10 ) // 8
!
Chrome ya no...
Números Flotantes
Gracias a "Binary Floating-Point
Arithmetic (IEEE 754)"
!
0.1 + 0.2 != 0.3
Valores Falsos
(abstract equality comparison)
'' == '0' // false
0 == '' // true
0 == '0' // true
!
false == 'false' // false
false == '0' // true
!
false == undefined // false
false == null // false
null == undefined // true
!
' trn ' == 0 // true
'' === '0' // false
0 === '' // false
0 === '0' // false
!
false === 'false' // false
false === '0' // false
!
false === undefined // false
false === null // false
null === undefined // false
!
' trn ' === 0 // false
hasOwnProperty
Cualquiera puede modificar el
prototipo y generarte problemas!
with
var a = { p: 0 }, c
!
with( a ){
p = 3
c = 5
}
!
a.p // 3
a.c // undefined
c // 5
eval
No es tan maaaalo como lo pintan!
eval("myValue = myObject." + myKey + ";");
en vez de:
myvalue = myObject[myKey]
No usen eval para ejecutar código desde el
servidor u otro servicio AJAX
switch
... fall through ..
!
va de case en case naturalmente
(requiere usar break)
valida con equivalencia simple
var blah = 0;
switch (blah) {
case -1:
alert('negative 1');
case 0:
alert(0)
case 1:
alert(1);
break;
case 2:
alert(2);
break;
default:
alert('default');
}
Doble Filo!!
Punto y Coma Opcional
(optional semicolon)
!
- Código más limpio -
Declaraciones Sin Corchetes
(block-less statements)
if( a ){
a.b = 3
}
if( a )
a.b = 3
if( a ){
a.b = 3
a.c = 4
}
if( a )
a.b = 3
a.c = 4
if( a ){
a.b = 3
}
a.c = 4
++ --
var a = [1,2,3,4], i = 0
a[i++] // 1
a[++i] // 3
new
"this"
métodos vs funciones
hoisting
el orden de definición de variables y
funciones afecta el resultado
function f(){
alert( a )
a = 5
}
f()
function f(){
alert( a )
a = 5
}
f() // ReferenceError a is not
defined
function f(){
alert( a )
var a = 5
}
f()
function f(){
alert( a )
var a = 5
}
f() // undefined
function f(){
var a
alert( a )
a = 5
}
f() // undefined
var a = 10
!
function f(){
alert( a )
var a = 5
}
!
f()
var a = 10
!
function f(){
alert( a )
var a = 5
}
!
f() // undefined
var a = 10
!
function f(){
var a
alert( a )
a = 5
}
!
f() // undefined
var a = 10
!
function f(){
a = 5
alert( a )
function a(){}
}
!
f() // ?
a // ?
var a = 10
function f(){
a = 5
alert( a )
function a(){}
}
f() // 5
a // ?
var a = 10
function f(){
a = 5
alert( a )
function a(){}
}
f() // 5
a // 5 ? no... 10!!
The Cool Parts + Patterns
Prototype
JavaScript es
Orientado a Objetos
(OO) pero no tiene
Clases
!
JavaScript es basado
en Prototipos
functions con
prototype
function Persona( name ){
this.name = name
}
Persona.prototype.alertName = function(){
alert( this.name )
}
Persona.prototype.setAge = function( age ){
this.age = age
}
var juan = new Persona( 'juan' )
juan.alertName() // juan
juan.setAge( 25 )
!
Persona.prototype.sayYolo = function(){
alert(this.name + ': YOLO!')
}
!
juan.sayYolo() // juan: YOLO!
Object.create( proto, properties )
constructor
juan.constructor // function Persona( ...
__proto__
(no es standard)
(firefox, chrome, opera,
android, ie11)
juan.__proto__
Function are
first-class
objects
¿first-class objects?
• se pueden asignar a variables
• se puede recibir/pasar como
argumentos
• se pueden retornar en una función
• son objetos y por lo tanto tienen
propiedades
Function are
first-class objects
=>
Chain
Callback
Observable
Delegation
Closure
MVC
MVVM
MV*
Chain
var o = {
i: 0,
f: function(){
++ this.i
return this
}
}
o.f().f().f()
o.i // 3
$('#myelem')
.hide()
.css({..})
.data(..)
.fadeIn(..)
Callback ( Async )
"las funciones pueden ser pasadas
como argumentos"
Es como una sala de espera en
la que dependiendo del turno
tu puedes ser llamado
function caller( cb ){
setTimeout(function(){
cb( new Date() )
}, 1000)
}
caller(function( now ){
alert( now )
})
$(document).on('click', click)
function click(){
alert('auch!')
}
$.ajax({
url: ".",
type: "get"
})
.done(function(){
console.log("async!")
})
console.log("sync")
Observable
+ "y Las funciones pueden
asignarse a variables"
Este patrón permite
que diferentes
interesados se
suscriban a un
objeto escuchando
eventos
GIST!
Delegación
Observar cientos de
elementos con cientos de
eventListeners no es
recomendable
Aplica en listados
document.getElementById("parent-list")
.addEventListener("click",function(e) {
if(e.target && e.target.nodeName == "LI") {
console.log("List item ",
e.target.id.replace("post-")," was clicked!");
}
});
$('#padre').on('click', '.hijo', callback)
Closures
se reduce a:
invocación inmediata de
funciones
(function(){
var hidden = 8
}())
!
console.log( typeof hidden )
// undefined
MVC / MVVM / MV*
Sfotipy!
Sfotipy!
• Agregar jQuery
• Crear nuestro Modelo
• Crear nuestra Vista
• Crear nuestro Controlador
• Observables!
Gracias!!

Más contenido relacionado

La actualidad más candente (8)

Jruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVMJruby On Rails. Ruby on Rails en la JVM
Jruby On Rails. Ruby on Rails en la JVM
 
Por pagar
Por pagarPor pagar
Por pagar
 
Clase 11 De Septiembre 2009
Clase 11 De Septiembre 2009Clase 11 De Septiembre 2009
Clase 11 De Septiembre 2009
 
Introducción a PHP 5.4
Introducción a PHP 5.4Introducción a PHP 5.4
Introducción a PHP 5.4
 
Funciones y procedimientos
Funciones y procedimientosFunciones y procedimientos
Funciones y procedimientos
 
Lima hack 2011
Lima hack 2011Lima hack 2011
Lima hack 2011
 
Introducción a Angular
Introducción a AngularIntroducción a Angular
Introducción a Angular
 
Tema2[php]
Tema2[php]Tema2[php]
Tema2[php]
 

Destacado

Destacado (20)

Html 1
Html 1Html 1
Html 1
 
Párrafos en HTML
Párrafos en HTMLPárrafos en HTML
Párrafos en HTML
 
5 Programación Web con .NET y C#
5 Programación Web con .NET y C#5 Programación Web con .NET y C#
5 Programación Web con .NET y C#
 
Wfc
WfcWfc
Wfc
 
ASP.NET MVC (2011)
ASP.NET MVC (2011)ASP.NET MVC (2011)
ASP.NET MVC (2011)
 
Introducción a WCF
Introducción a WCFIntroducción a WCF
Introducción a WCF
 
curso html
curso htmlcurso html
curso html
 
Qué Son Las Css
Qué Son Las CssQué Son Las Css
Qué Son Las Css
 
Configuración básica de Entity Framework
Configuración básica de Entity FrameworkConfiguración básica de Entity Framework
Configuración básica de Entity Framework
 
Conceptos básicos de Asp.net mvc
Conceptos básicos de Asp.net mvcConceptos básicos de Asp.net mvc
Conceptos básicos de Asp.net mvc
 
SSP Software Portfolio
SSP Software PortfolioSSP Software Portfolio
SSP Software Portfolio
 
css posicionamiento y visualización
css posicionamiento y visualizacióncss posicionamiento y visualización
css posicionamiento y visualización
 
Introducción a Asp.Net Mvc
Introducción a Asp.Net MvcIntroducción a Asp.Net Mvc
Introducción a Asp.Net Mvc
 
No me hagas pensar. Buenas Prácticas para desarrollar en la web
No me hagas pensar. Buenas Prácticas para desarrollar en la webNo me hagas pensar. Buenas Prácticas para desarrollar en la web
No me hagas pensar. Buenas Prácticas para desarrollar en la web
 
Programación en html 4
Programación en html 4Programación en html 4
Programación en html 4
 
Programación en html 2
Programación en html 2Programación en html 2
Programación en html 2
 
Programación con C/AL para Microsoft Business Solutions Navision
Programación con C/AL para Microsoft Business Solutions NavisionProgramación con C/AL para Microsoft Business Solutions Navision
Programación con C/AL para Microsoft Business Solutions Navision
 
1 Programación Web con .NET y C#
1 Programación Web con .NET y C#1 Programación Web con .NET y C#
1 Programación Web con .NET y C#
 
Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5Desarrollo de Aplicaciones Web con ASP.NET MVC5
Desarrollo de Aplicaciones Web con ASP.NET MVC5
 
Introducción a la Arquitectura de Software
Introducción a la Arquitectura de SoftwareIntroducción a la Arquitectura de Software
Introducción a la Arquitectura de Software
 

Similar a Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript

Similar a Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript (20)

Curso Swift
Curso SwiftCurso Swift
Curso Swift
 
JavaScript para desarrolladores c#
JavaScript para desarrolladores c#JavaScript para desarrolladores c#
JavaScript para desarrolladores c#
 
Codemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícilCodemotion 2016 - d3.js un taller divertido y difícil
Codemotion 2016 - d3.js un taller divertido y difícil
 
Presentación JavaScript
Presentación JavaScriptPresentación JavaScript
Presentación JavaScript
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQuery
 
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casaTypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
TypeScript para Javeros: Cómo programar web front-end y sentirse como en casa
 
¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas¿Cómo mantener tu javascript?: Buenas prácticas
¿Cómo mantener tu javascript?: Buenas prácticas
 
05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos05. Creando e implementando objetos y métodos
05. Creando e implementando objetos y métodos
 
Javascript continuación
Javascript   continuaciónJavascript   continuación
Javascript continuación
 
React
ReactReact
React
 
Javascript Básico
Javascript BásicoJavascript Básico
Javascript Básico
 
Javascript
JavascriptJavascript
Javascript
 
Javascript - 2014
Javascript - 2014Javascript - 2014
Javascript - 2014
 
PRACTICA 13
PRACTICA 13PRACTICA 13
PRACTICA 13
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
 
Curso basico c sharp
Curso basico c sharpCurso basico c sharp
Curso basico c sharp
 
Java web Lección 04 - JSTL
Java web Lección 04 - JSTLJava web Lección 04 - JSTL
Java web Lección 04 - JSTL
 
Practica 13 de_alice(2)
Practica 13 de_alice(2)Practica 13 de_alice(2)
Practica 13 de_alice(2)
 
Practica 13 de_alice(2)
Practica 13 de_alice(2)Practica 13 de_alice(2)
Practica 13 de_alice(2)
 
Practica 13 alice
Practica 13 alicePractica 13 alice
Practica 13 alice
 

Más de David Ballén

Más de David Ballén (6)

Ocho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScriptOcho cosas que debes saber de JavaScript
Ocho cosas que debes saber de JavaScript
 
BogotaJS Bday 2016: Taller de SumobotJr
BogotaJS Bday 2016: Taller de SumobotJrBogotaJS Bday 2016: Taller de SumobotJr
BogotaJS Bday 2016: Taller de SumobotJr
 
Wrold Bot Domination: Sumobot jr
Wrold Bot Domination: Sumobot jrWrold Bot Domination: Sumobot jr
Wrold Bot Domination: Sumobot jr
 
Frontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para FrontendsFrontend Tools | Herramientas para Frontends
Frontend Tools | Herramientas para Frontends
 
Manipulación de Video de la Webcam con JavaScript
Manipulación de Video de la Webcam con JavaScriptManipulación de Video de la Webcam con JavaScript
Manipulación de Video de la Webcam con JavaScript
 
Cómo construir un Servidor Web y Bot de Memes para Slack
Cómo construir un Servidor Web y Bot de Memes para SlackCómo construir un Servidor Web y Bot de Memes para Slack
Cómo construir un Servidor Web y Bot de Memes para Slack
 

Último

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
FagnerLisboa3
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (11)

EPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial UninoveEPA-pdf resultado da prova presencial Uninove
EPA-pdf resultado da prova presencial Uninove
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 

Mejorando.la: Curso Profesional de Frontend, Dominando JavaScript