Lo básico de Javascript ISIS2603 Departamento de Sistemas y Computación Universidad de los Andes Javascript Permite extender las capacidades de HTML Se utiliza principalmente del lado del cliente para mejoras en la interfaz de usuario y para crear páginas web dinámicas También hay una forma de JavaScript del lado del servidor (Server-side JavaScript o SSJS). Su uso en aplicaciones externas a la web, por ejemplo en documentos PDF, aplicaciones de escritorio (mayoritariamente widgets) es también significativo. Javascript (cont.) Se puede utilizar dentro de cualquier lenguaje que traduzca a HTML como PHP, ASP, SVG, etc. Es un lenguaje interpretado que se embebe en una página Web: las instrucciones las analiza y procesa el navegador en el momento que deben ser ejecutadas. Adopta nombres y convenciones del lenguaje de programación Java. Sin embargo Java y JavaScript no están relacionados y tienen semánticas y propósitos diferentes. Ejemplo simple <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>Ejemplo sencillo</title> <h1 id="header">Esto es JavaScript</h1> <script> alert(“Bienvenido a los ejemplos de javascript”); </script> </head> <body>/*...*/</body> </html> Javascript (cont.) Se define como: imperativo y estructurado, orientado a objetos, basado en prototipos, , débilmente tipado y dinámico. Imperativo y estructurado Variables cuyo alcance es el de la función donde se definieron var x; // define la variable x var y = 2; // define la variable y y le asigna el valor 2 Estructuras de control: if, bucles for, sentencias switch, etc. if (a < b) { t = b; b = a; } while (b !== 0) { b = a % b; a = t; } Tipado dinámico El tipo está asociado al valor, no a la variable. var x = 15; // Number (int) declaration var y = 15.6 // Number (float) declaration var z = 'Hello World' // String declaration var arr = []; // Array literal declaration var obj = {}; // Object literal declaration console.log( typeof( x ) ); // number console.log( typeof( z ) ); // string console.log( typeof( arr ) ); // object console.log( typeof( obj ) ); // object Orientado Objetos Los objetos son arrays asociativos obj.x = 10 y obj['x'] = 10 son equivalentes Las propiedades y sus valores pueden ser creados, cambiados o eliminados en tiempo de ejecución. var triangulo = new Object(); // el objeto triangulo es un objeto vacío triangulo.ladoA = 3; // triangulo tiene una nueva propiedad ladoA cuyo // valor es 3 triangulo.ladoB = 4; triangulo.ladoC = 5; Orientado Objetos Agrega el método getArea al objeto triangulo triangulo.getArea = function () { // Devuelve el área de un triángulo var semiperimetro = (this.ladoA + this.ladoB + this.ladoC) / 2; var valor = semiperimetro * (semiperimetro - this.ladoA) * (semiperimetro this.ladoB) * (semiperimetro - this.ladoC); return Math.sqrt( valor ); }; // El punto y coma aquí es obligatorio. Prototipos JavaScript usa prototipos en vez de clases para el uso de herencia. Un prototipo es un objeto que se copia para crear otros objetos Se realiza a través de Funciones como constructores de objetos Las funciones también se comportan como constructores. Prototipos (cont.) Prefijar una llamada a la función con la palabra clave new Crear una nueva instancia de un prototipo, que heredan propiedades y métodos del constructor // Una simple función function Saludator() { alert("Saludos factory!!") } // Y una simple llamada Saludator() // Un nuevo objeto a partir de su "clase“ prototipo var saludo = new Saludator() Prototipos (cont.) var Saludator = function (nom) { this.nombre = nom this.saluda = function() { alert("hola "+plural(this.nombre)) } function plural(n) { return n + "s" } } var obj1 = new Saludator("mundo") obj1.saluda() obj1.plural() // fallaría porque plural() es privado Funciones como métodos A diferencia de muchos lenguajes orientados a objetos, no hay distinción entre la definición de función y la definición de método. La distinción se produce durante la llamada a la función; una función puede ser llamada como un método. Cuando una función es llamada como un método de un objeto, la palabra clave this, que es una variable local a la función, representa al objeto que invocó dicha función. Funciones de primera clase A las funciones se les suele llamar ciudadanos de primera clase; son objetos en sí mismos. Una función javascript propiedades y métodos, como .call() y .bind(). Una función anidada es una función definida dentro de otra. Esta es creada cada vez que la función externa es invocada. Parámetros en las funciones Un número indefinido de parámetros pueden ser pasados a la función. La función puede acceder a ellos a través de los parámetros o también a través del objeto local arguments.