JavaScript Avanzado - diseño y programación web

Anuncio
JAVASCRIPT
1
Avanzado
OBJETOS



Técnicamente, un objeto de JavaScript es un array
asociativo formado por las propiedades y los métodos del
objeto. Así, la forma más directa para definir las
propiedades y métodos de un objeto es mediante la notación
de puntos de los arrays asociativos.
Un array asociativo es aquel en el que cada elemento no
está asociado a su posición numérica dentro del array, sino
que está asociado a otro valor específico. Los valores de los
arrays normales se asocian a índices que siempre son
numéricos. Los valores de los arrays asociativos se asocian
a claves que siempre son cadenas de texto.
La forma tradicional de definir los arrays asociativos es
mediante la clase Array:
var elArray = new Array();
elArray['primero'] = 1;
elArray.segundo = 2;
2
OBJETOS.PROPIEDADES
elObjeto.id = "10";
elObjeto.nombre = "Objeto de prueba";


Al contrario de lo que sucede en otros lenguajes orientados
a objetos, como por ejemplo Java, para asignar el valor de
una propiedad no es necesario que la clase tenga definida
previamente esa propiedad.
También es posible utilizar la notación tradicional de los
arrays para definir el valor de las propiedades:
elObjeto['id'] = "10";
elObjeto['nombre'] = "Objeto de prueba";
3
OBJETOS.MÉTODOS (I)

Los métodos se definen asignando funciones al objeto. Si la
función no está definida previamente, es posible crear una
función anónima para asignarla al nuevo método del objeto.
Var elObjeto = new Object();
elObjeto.id = "10";
elObjeto.muestraId = function() {
alert("El ID del objeto es " + this.id);
}


La palabra this se suele utilizar habitualmente dentro de
los métodos de un objeto y siempre hace referencia al objeto
que está llamado a ese método.
Además, la palabra this se debe utilizar siempre que se
quiera acceder a una propiedad de un objeto, ya que en otro
caso, no se está accediendo correctamente a la propiedad.
4
OBJETOS.MÉTODOS (II)

Además de las funciones anónimas, también es posible
asignar a los métodos de un objeto funciones definidas con
anterioridad (sólo se debe indicar el nombre de la función
externa sin paréntesis):
function obtieneId() {
return this.id;
}
elObjeto.obtieneId = obtieneId;

Si escribiésemos elObjeto.obtieneId = obtieneId(); se ejecuta
la función obtieneId() y el resultado de la ejecución se
asigna a la propiedad obtieneId del objeto. Así, el objeto no
tendría un método llamado obtieneId, sino una propiedad
con ese nombre y con un valor igual al resultado devuelto
por la función externa.
5
OBJETOS DELETE

Las propiedades y los métodos pueden ser
eliminados dinámicamente con el operador
delete.
delete obj.valor;
6
JSON - INTRODUCCIÓN



JSON (JavaScript Object Notation) es un formato sencillo
para el intercambio de información. El formato JSON
permite representar estructuras de datos (arrays) y objetos
(arrays asociativos) en forma de texto. La notación de
objetos mediante JSON es una de las características
principales de JavaScript y es un mecanismo definido en
los fundamentos básicos del lenguaje.
En los últimos años, JSON se ha convertido en una
alternativa al formato XML, ya que es más fácil de leer y
escribir, además de ser mucho más conciso. No obstante,
XML es superior técnicamente porque es un lenguaje de
marcado, mientras que JSON es simplemente un formato
para intercambiar datos.
La especificación completa de JSON se puede consultar en
RFC 4627 ( http://tools.ietf.org/html/rfc4627 ) y su tipo
MIME oficial es application/json.
7
NOTACIÓN JSON (I)

var miarray = new Array();
//var miarray = new Array( 1, 3, 7);
Array “normal” notación tradicional:
miarray[0]=“ford”;
miarray[1]=“seat”;
……

Array “normal” notación JSON:
miarray = [“ford”, “seat”, “mustang”];

Array asociativo notación tradicional:
miarray[„primero‟] = 1;
miarray.segundo = 2;

Array asociativo notación JSON:
miarray = {primero:1, segundo:2, tercero:3};
8
NOTACIÓN JSON (II)


La notación JSON para los arrays asociativos se compone
de tres partes:
 1. Los contenidos del array asociativo se encierran entre
llaves ({ y })
 2. Los elementos del array se separan mediante una
coma (,)
 3. La clave y el valor de cada elemento se separan
mediante dos puntos (:)
Si la clave no contiene espacios en blanco, es posible
prescindir de las comillas que encierran sus contenidos. Sin
embargo, las comillas son obligatorias cuando las claves
pueden contener espacios en blanco:
var titulosModulos = {"Lector RSS": "rss", "Gestor de email":
"email", "Agenda":"agenda"};
9
EJEMPLO

En un mismo objeto se puede utilizar de forma simultánea
la notación tradicional de JavaScript y la notación JSON:
var libro = new Object();
libro.numeroPaginas = 150;
libro.autores = [ {id: 50}, {id: 67} ];

El ejemplo anterior se puede reescribir utilizando
solamente la notación tradicional:
var libro = { numeroPaginas: 150 };
libro.autores = new Array();
libro.autores[0] = new Object();
libro.autores[0].id = 50;
libro.autores[1] = new Object();
libro.autores[1].id = 67;

El ejemplo anterior también se puede reescribir utilizando
exclusivamente la notación JSON:
var libro = { numeroPaginas: 150, autores: [{id: 50}, {id: 67}] };
10
CLASES



Los objetos que se han visto hasta ahora son una simple
colección de propiedades y métodos que se definen para
cada objeto individual. Sin embargo, en la programación
orientada a objetos, el concepto fundamental es el de clase.
La forma habitual de trabajo consiste en definir clases a
partir de las cuales se crean los objetos con los que trabajan
las aplicaciones.
A pesar de estas limitaciones, es posible utilizar en
JavaScript unos elementos parecidos a las clases y que se
denominan pseudoclases. Los conceptos que se utilizan
para simular las clases son las funciones constructoras y el
prototype de los objetos.
11
CLASES – CONSTRUCTOR (I)


En JavaScript no existe el concepto de constructor. En
realidad, JavaScript emula el funcionamiento de los
constructores mediante el uso de funciones.
JavaScript utiliza funciones para simular los constructores
de objetos, por lo que estas funciones se denominan
"funciones constructoras".
function Factura(idFactura, idCliente) {
this.idFactura = idFactura;
this.idCliente = idCliente;
}
var laFactura = new Factura(3, 7);

Las funciones constructoras no solamente pueden
establecer las propiedades del objeto, sino que
también pueden definir sus métodos.
12
CLASES – CONSTRUCTOR (II)
function Factura(idFactura, idCliente) {
this.idFactura = idFactura;
this.idCliente = idCliente;
this.muestraCliente = function() {
alert(this.idCliente);
}
this.muestraId = function() {
alert(this.idFactura);
}

Problema: con esta técnica, cada vez que se instancia un
objeto, las funciones muestraCliente() y muestraId() se
crean de nuevo por cada objeto creado, se penaliza el
rendimiento y un consumo excesivo.
13
CLASES – PROTOTYPE (I)

La propiedad que soluciona este inconveniente y que
permite que cualquier objeto JavaScript herede de forma
automática todas las propiedades y métodos de otro objeto
llamado prototype.
function Factura(idFactura, idCliente) {
this.idFactura = idFactura;
this.idCliente = idCliente;
}
Factura.prototype.muestraCliente = function() {
alert(this.idCliente);
}
Factura.prototype.muestraId = function() {
alert(this.idFactura);
}
var laFactura = new Factura(3, 7);
laFactura.muestraCliente();
var otraFactura = new Factura(5, 4);
otraFactura.muestraId();
14
CLASES – PROTOTYPE (II)


Una de las posibilidades más interesantes de la propiedad
prototype es que también permite añadir y/o modificar las
propiedades y métodos de los objetos predefinidos por
JavaScript.
Si por ejemplo se considera la clase Array, esta no dispone de
un método que indique la posición de un elemento dentro de
un array (como la función indexOf() de Java). Modificando el
prototipo con el que se construyen los objetos de tipo Array, es
posible añadir esta funcionalidad:
Array.prototype.indexOf = function(objeto) {
var resultado = -1;
for(var i=0; i<this.length; i++) {
if(this[i] == objeto) {
resultado = i;
break;
}
}
return resultado;
}
15
FRAMEWORK PROTOTYPE

Framework que facilita el desaroollo de
aplicaciones web con JavaScript y AJAX.

Web: http://www.prototypejs.org

Api: http://prototypejs.org/assets/2009/8/31/prototype.js

Api doc: http://www.prototypejs.org/api
16
FRAMEWORK SCRIP.ACULO.US (I)

Script.aculo.us ( http://script.aculo.us/ ) es una de las
muchas librerías que han surgido para facilitar el
desarrollo de aplicaciones JavaScript y que están basadas
en Prototype.

Api: http://script.aculo.us/dist/scriptaculous-js-1.8.3.zip

Api doc: http://wiki.script.aculo.us/scriptaculous/

La librería está dividida en varios módulos:

Efectos: permite añadir de forma muy sencilla efectos
especiales a cualquier elemento de la página. La librería
incluye una serie de efectos básicos y otros efectos complejos
construidos con la combinación de esos efectos básicos. Entre
los efectos prediseñados se encuentran el parpadeo,
movimiento rápido, aparecer/desaparecer, aumentar/disminuir
de tamaño, desplegarse, etc.
http://wiki.github.com/madrobby/scriptaculous/combination-effects
17
FRAMEWORK SCRIP.ACULO.US (II)

Controles: define varios controles que se pueden añadir
directamente a cualquier aplicación web. Los tres controles que
forman este módulo son: "arrastrar y soltar", que permite definir
los elementos que se pueden arrastrar y las zonas en las que se
pueden soltar elementos; "autocompletar", que permite definir un
cuadro de texto en el que los valores que se escriben se
autocompletan con ayuda del servidor; editor de contenidos, que
permite modificar los contenidos de cualquier página web
añadiendo un sencillo editor AJAX en cada elemento.
http://wiki.github.com/madrobby/scriptaculous/controls

Utilidades: la utilidad principal que incluye se llama builder, que
se utiliza para crear fácilmente nodos y fragmentos complejos de
DOM.
http://wiki.github.com/madrobby/scriptaculous/builder
18
FRAMEWORK JQUERY



jQuery ( http://jquery.com/ ) es la librería JavaScript que ha
irrumpido con más fuerza como alternativa a Prototype. jQuery
también ha sido programada de forma muy eficiente y su versión
comprimida apenas ocupa 20 KB.
jQuery comparte con Prototype muchas ideas e incluso dispone de
funciones con el mismo nombre. Sin embargo, su diseño interno
tiene algunas diferencias drásticas respecto a Prototype, sobre
todo el "encadenamiento" de llamadas a métodos.
La documentación de jQuery es muy completa en inglés e incluye
muchos ejemplos. Además, también existen algunos recursos
útiles en español para aprender su funcionamiento básico:
http://docs.jquery.com/

Api: http://blog.jquery.com/2010/02/19/jquery-142-released/
19
+ FRAMEWORKS

Comparativa: Javascript Framework Matrix


http://matthiasschuetz.com/javascript-frameworkmatrix/en/
Librerias para visualizar gráficos

http://www.datavisualization.ch/tools/13-javascriptlibraries-for-visualizations
20
UTILIDADES


Comprimir el código JavaScript: herramientas que reducen
mucho el tamaño del código sin modificar su comportamiento.
 Eliminan espacios en blanco sobrantes, eliminan comentarios
y convierten toda la aplicación en una única línea de código
muy larga. También pueden sustituir el nombre de las
variables y funciones.
 http://code.google.com/intl/es/closure/compiler/ (jQuery)
 http://shrinksafe.dojotoolkit.org/
Ofuscar el código JavaScript: hacen casi imposible entender el
código fuente de la aplicación.
 http://www.jasob.com/
 http://dean.edwards.name/packer/
 http://adrian3.googlepages.com/jsjuicer.html
 Jsjuicer online: http://gueschla.com/labs/jsjuicer/
21
SCRIPTS

http://www.twinhelix.com

http://www.javascriptkit.com

http://www.elcodigo.com

http://www.javascripts.astalaweb.net

http://www.softcomplex.com

Basandas en jQuery:
 jDigiClock, Reloj HTC Hero:
http://www.anieto2k.com/2010/02/15/jdigiclock-reloj-htc-hero-conjquery/
 CSS Dock Menu
http://www.ndesign-studio.com/blog/mac/css-dock-menu
 Tooltip
http://www.bosrup.com/web/overlib/
APIS

http://www.programmableweb.com/apis/directory/1?sort=mashups
22
Descargar