Entendiendo JavaScript

Uriel Hernández

NaN == NaN // False
[] == ![] // True

WtfJS

El problema de JavaScript es ser distinto.

El Paradigma

El paradigma de JS son los prototipos

En POO los objetos se crean con clases

En POP los objetos se crean con... otros objetos.

let animal = Object.create(null);

animal.estaVivo = true;
let perro = Object.create(animal);

perro.ladrar = function(){
  console.log(“Bark Bark”);
}

Sin clases a la vista

Las clases

Resulta que en JS sí existen las "clases"

class Animal{

}
class Animal{

}

Azúcar sintáctica

Elementos del lenguaje que hace al lenguaje más expresivo y fácil de leer

class Animal{
  estaVivo = true;
}
let animal = Object.create(null);

animal.estaVivo = true;

Las funciones

function hola(){
  console.log("Hola mundo");
}

Las funciones son ciudadanos de primera clase

Ciudadanos de primera clase

  • Asignar a variables
  • Pasar como argumentos
  • Retornar
function hola(){
  console.log("Hola mundo");
}

hola.esObjeto = true;
function hola(){
  console.log("Hola mundo");
}

let helloer = new hola();
helloer.isObjecto = true;

Recapitulemos, las funciones son objetos, pero también pueden crear objetos.

Entendiendo a JavaScript

function hola(){
  console.log("Hola mundo");
}

let helloer = new hola();
helloer.isObjecto = true;
let nuevoObjeto = Object.create(hola.prototype);

let resultado = hola.call(nuevoObjeto);

return resultado && typeof resultado === 'object'  ?
    resultado : nuevoObjeto;

A partir del prototipo de la función, se crea otro objeto, esto es un objeto creando otro objeto

let helloer = new hola();

Azúcar sintáctica

Conclusión

Entender JavaScript

  • Las funciones
  • Los prototipos
  • La programación asíncrona

Entonces las cosas raras tendrán sentido

[] == ![] // True

deck

By Uriel Hernandez

deck

  • 210