Javascript C#

25
#IberianSPC ¿Cuál es el problema con JavaScript ?

Transcript of Javascript C#

Page 1: Javascript C#

#IberianSPC

¿Cuál es el problema con JavaScript?

Page 2: Javascript C#

#IberianSPC

¿Por qué debemos aprender Javacript?

Page 3: Javascript C#
Page 4: Javascript C#
Page 5: Javascript C#

Comparando los lenguajes

C#Tipado fuerteEstáticoHerencia clásicaClasesConstructoresMétodos

JavaScriptTipado débilDinámicoHerencia por prototiposFuncionesFuncionesFunciones

Page 6: Javascript C#

DemoCOMPARACIÓN DE LENGUAJES

Page 7: Javascript C#

#IberianSPC

Duck Typing

Page 8: Javascript C#

Duck typingpublic class Persona{ public string Name { get; set; }}

public class Educado{ public void Saluda(Persona persona) { Console.WriteLine("Hola {0}", persona.Name); }}

Page 9: Javascript C#

Duck typingvar Persona = function (name) { this.name = name;}

function educado(arg1) { console.log('Hola ' + arg1.name);}

var p = new Persona("Luis");

educado(p);

educado({ name: "Juan" });

Page 10: Javascript C#

#IberianSPC

JavaScript

Page 11: Javascript C#

Tipos

Tipos por valor boolean string number

Tipos por referencia object

Delegados function

Especiales null undefined

Page 12: Javascript C#

Ámbito global

Toda variable no asignada a un objeto se asigna por defecto a window.

var myVar = 1;

function myFunction() { alert(myVar); alert(window.myVar);}

myFunction();

Page 13: Javascript C#

Variable hoisting

Los { } no crean ámbito como en C# (Sólo las funciones)

public MainPage(){

if (true){var title = "Main";}this.InitializeComponent();

}

La variable declarada dentro de una función sube hasta el principio de la función.

http://jsfiddle.net/luisruizpavon/BXv7F/

Page 14: Javascript C#

this

C# La palabra clave this hace referencia a la instancia actual de la

clase.

JS Hace referencia al propietario de la función que la está invocando

y se puede modificar haciendo uso de call/apply

http://jsfiddle.net/luisruizpavon/q2GeU/

Page 15: Javascript C#

this - Patrón de invocación por método

Una función es almacenada como propiedad de un objeto convirtiéndose así en lo que denominamos un método.

var myObj = { name: 'Luis', lastName: 'Ruiz', fullName: function () { return this.name + ' ' + this.lastName; }};

alert(myObj.fullName());

Page 16: Javascript C#

Truthy y Falsy

Valores que siempre dan false: false 0 "" null undefined NaN

Todos los demás valores son siempre true, incluyendo “0”, “false”, funciones vacías, arrays vacíos y objetos vacíos.

Page 17: Javascript C#

Los operadores ==/!=

Estos 2 operadores no funcionan igual que en C#. Determinan la igualdad con type coalescing (Intenta convertir el valor cast)

alert("ola ke ase" == "ola ke ase");alert(1 == 1);alert(1 == "1");

Usar siempre === y !=== (.Equals() de C#)

http://jsfiddle.net/luisruizpavon/RXaU3/

Page 18: Javascript C#

Funciones I

Pueden parecernos que son como los métodos en C#, pero no es así:

function myFunction(arg1, arg2, arg3) { alert(arg1); alert(arg2); alert(arg3);}

myFunction(1);

Page 19: Javascript C#

Funciones II

¿Sobrecarga de funciones?

function myFunction(arg1) { alert("Uno");}

function myFunction(arg1, arg2) { alert("Dos");}

function myFunction(arg1, arg2, arg3) { alert("Tres");}

myFunction(1);

Page 20: Javascript C#

Funciones III

El objeto “arguments” Sólo está disponible en el cuerpo de la función

function myFunction(arg1) { alert(arguments.length);}

myFunction(1);

Page 21: Javascript C#

Funciones IV

Todas las funciones retornan un valor Sino está definido, retorna ‘undefined’ return; También retorna ‘undefined’

function myFunction() { return;}

var my = myFunction(1);

alert(typeof my);

Page 22: Javascript C#

Funciones V

Las funciones son objetos. Tienen propiedades y funciones. Podemos pasar como parámetros de una función otras funciones.

function myFunction(arg1) { alert(arg1);}

alert(myFunction.length);alert(myFunction.toString());

Page 23: Javascript C#

Patrón módulo

Nos ayuda a mantener el contexto global lo más limpio y seguro posible.

Bootstraper

Un ejemplo de uso son los plugins de jQuery.

Page 24: Javascript C#

Frameworks

Require.js – Cargador de módulos JavaScript (ServiceLocator) Underscore.js – Utilidades (Métodos extensores) jQuery TypeScript linq.js - LINQ for JavaScript Backbone - MVC Knockout - MVVM AngularJS – Google Handlebars.js …

Page 25: Javascript C#

Herramientas

Developer Tools Firebug Chrome Developer Tools JSHint - http://jshint.com jsfiddle - http://jsfiddle.net Visual Studio WebStorm - Jetbrains