SlideShare una empresa de Scribd logo
1 de 35
Descargar para leer sin conexión
Prototype.js
 Breve introducción




                      aitor.name
Historia
●   Creado en 2005 por Sam Stephenson como
    parte del soporte AJAX de Ruby on Rails
●   Proyecto externo a Rails pero muy vinculado a
    él
●   Muy usada por developers Rails




                                          aitor.name
Uso real




           aitor.name
Principales funcionalidades
●   Manipulación e inspección del DOM
●   Gestión de eventos
●   Extensiones a Javascript
●   AJAX de alto nivel




                                        aitor.name
DOM > Extensión
●   Principal característica diferenciadora con otros
    frameworks
●   Añade métodos (funciones) extra a los nodos
    del DOM
●   Es automágica en navegadores que soportan
    modificar el “prototype” de objetos nativos

| var obj = document.
|           getElementById( “id”);
|
| obj.addClassName( “clase”);
                                            aitor.name
DOM > Acceso a los elementos
●   $(id) → document.getElementById()

| $( “flash”).hide();

●   También extiende elementos

|   // viejos navegadores (IE6)
|   var e = document.
|           getElementById( “flash”);
|
|   e.hide();     // FAIL
|   $( e).hide(); // WIN
                                        aitor.name
DOM > Acceso a los elementos
●   $$(sel) → document.querySelectorAll()


|   // devuelve array de elementos
|   var links = $$( “a.ugly”);
|
|   for( link in links) {
|     link.remove();
|   }



                                       aitor.name
DOM > Resumen de funcionalidad
●   Navegación
| // descendants, siblings, ancestors,
| // previousSiblings ...
●   Modificación
| // absolutize, addClassName, remove,
| // insert, update ...
●   Estilos
| // setStyle, getStyle, hide, toggle,
| // getDimensions ...         aitor.name
DOM > Extensiones propias
●   Funciones globales (nada nuevo)


|   // $$() simplificado
|   function $$0( selector) {
|     return ( $$( selector))[ 0];
|   }
|
|   $$0( “#banner img.p0rn”).show();



                                      aitor.name
DOM > Extensiones propias
●   Extensión del DOM

| Element.addMethods( {
| bordea: function( element, color) {
|   element.setStyle( {
|     border: "10px solid " + color
|   });
|   return element; // para encadenar
| }
| });
|
| $( “id”).bordea( “pink”).show();
                             aitor.name
Eventos
●   La gestión de eventos es lo más doloroso en el
    soporte de múltiples navegadores
●   Resumen: todo el mundo lo hace como manda
    la W3C, e IE lo hace de otra forma totalmente
    diferente (+ pierde memoria en algunos casos)
●   Otros pequeños detalles entre navegadores




                                          aitor.name
Eventos > Registro
●   Event.observe() es la base de la gestión de
    eventos

|   function activar( event) {
|     var element = event.element();
|     element.addClassName( “activa”);
|   }
|
|   $( “bocina”).observe( “click”,
|                         activar
|   );

                                       aitor.name
Eventos > Desregistro
●   Event.stopObserving() y sus múltiples
    personalidades

|   // un evento/handler concreto
|   $( “buy”).stopObserving( “click”,
|                            notifica);
|
|   // todos los handlers de un evento
|   $( “buy”).stopObserving( “click”);
|
|   // todos los eventos/handlers
|   $( “buy”).stopObserving();
                                     aitor.name
Eventos > Propagación
●   Event.stop(): 2x1, previene la propagación
    del evento y la realización de la acción por
    defecto
| $( “comprar”).observe( “click”,
| function( evt) {
|   Event.stop( evt);
| }
| });
●   Evitamos los poco estéticos “#” al final de las
    URLs (por los <a href=”#” ...>)
                                             aitor.name
Javascript > Ruby.clone()
●   Prototype nació con RoR, es natural que quiera
    hacer Javascript lo más similar a Ruby
●   Principales características
    ●   Estilo funcional con los iteradores
    ●   Programación OO
    ●   Mejoras al sistema de funciones




                                              aitor.name
Javascript > Iteradores
●   Característica fundamental de Prototype
●   Hace el lenguaje más “funcional” (tipo Lisp o
    Haskell)
●   Implementado por un “mixin” llamado
    Enumerable
●   “mixin”: conjunto de métodos (funciones) que
    no se usan solos, si no que se incorporan a
    otros objetos
●   Usos principales: Array, Hash
                                           aitor.name
Javascript > Iteradores
●   Iterando con each()

| [ “one”, “two”, “three”].each(
| function( msg) {
|   alert( msg);
|   }
| );
|
| [“one”, “two”, “three”].each(alert);


                              aitor.name
Javascript > Iteradores
●   Búsquedas con find() y findAll()

|   [ 1, 7, -2, -4, 5].find(
|   function(n) { return n < 0;}
|   );
|   //    -2
|
|   [ 1, 7, -2, -4, 5].findAll(
|   function(n) { return n < 0; }
|   );
|   //    [ -2, -4]
                                       aitor.name
Javascript > Iteradores
●   Otras funcionalidades

| $$( “#main .warning”).invoke( hide);
|
| [“Erase”,"una",“vez”,“un”,“circo”].
| map( function(s) {
|   return s.charAt( 0).toUpperCase();
| });
|
| //   ['E', 'U', 'V', 'U', 'C']

                              aitor.name
Javascript > Iteradores
●   Hay muchos iteradores que simplifican el
    código (una vez aprendidos)

|   //   all, any, collect, detect, each,
|   //   eachSlice, entries, every,
|   //   filter, find, findAll, grep,
|   //   inGroupsOf, include, inject,
|   //   inspect, invoke, map, max, min,
|   //   parition, pluck, reject, select,
|   //   size, some, sortBy, zip


                                          aitor.name
Javascript > OOP
●   Javascript es un lenguaje OO basado en
    prototipos
●   Esto es muy útil, pero el resto del mundo usa
    clases
●   Prototype ofrece extensiones para implementar
    algo que se parece a classes OOP
●   Como todo en Prototype, con cierto sabor a
    Ruby


                                           aitor.name
Javascript > OOP > Crear clases
|   var Person = Class.create( {
|    initialize: function(name) {
|       this.name = name;
|    },
|    say: function(message) {
|       return this.name + ': ' +
|              message;
|    }
|   });
|
|   var paris = new Person( “Paris H”);
|   paris.say( “uhhh”);
|
|   //   “Paris H: uhhh”        aitor.name
Javascript > OOP > Extender clases
|   var Pirate = Class.create(Person, {
|    say: function( $super, message) {
|     return $super( message) +
|            “, yarr!”;
|    }
|   });
|
|   var john = new Pirate(“Long John”);
|   john.say( “ahoy matey”);
|
|   //   "Long John: ahoy matey, yarr!"


                                aitor.name
Javascript > OOP > Mixins
|   // base class
|   var IceCream = Class.create( {...});
|
|   // mixins
|   var Cookie = {...},
|       Cream = {...};
|
|   var häagenDaz = Class.create(
|                    IceCream,
|                    Cookie, Cream, {
|                    }
|                   );

                                aitor.name
Javascript > function
●   En Javascript las funciones son “first-class”:
    son objetos en sí mismas
●   Como tal tienen propiedades+métodos y se
    pueden manejar como otros objetos




                                             aitor.name
Javascript > function > bind
●   Fija la función a un contexto de forma que al
    ser llamada nos aseguramos de que “this” hace
    referencia a ese contexto
●   Puede parecer un poco complejo al principio
    pero es muy útil




                                          aitor.name
Javascript > function > bind

|   function message() {
|     return "Head and " + this;
|   }
|
|   var human = message.bind( "body");
|   human(); //    "Head and body"
|
|   var mrPotato = message.bind("legs");
|   mrPotato(); //    "Head and legs"


                                   aitor.name
Javascript > function > bind
●   Especialmente útil en gestión de eventos

| var AlertOnClick = Class.create( {
| initialize: function( msg) {
|     this.msg = msg;
| },
| handleClick: function( event) {
|     alert( this.msg);
| }
| });

                                          aitor.name
Javascript > function > bind
|   var myalert = new AlertOnClick(
|                     "Clicked!");
|
|   $( “foo”).observe( “click”,
|    myalert.handleClick
|   ); //    FAIL ( “this” es invalido)
|
|   $( “bar”).observe( “click”,
|    myalert.handleClick.
|    bind( myalert)
|   ); //    WIN ( “this” == objeto)

                                 aitor.name
AJAX
●   La clase Ajax.Request permite realizar
    peticiones AJAX en una forma OO

| new Ajax.Request( "/your/url", {
| onSuccess: function( response) {
|   // handle the response content...
| },
| onFailure: function( response) {
|   // handle error
| }
| });

                                       aitor.name
AJAX
●   Hay diferentes tipos de callbacks

| // onCreate, onLoading, onLoaded,
| // onException, onComplete, on{XYZ}
| // ...

●   Se puede configurar la petición
| // asynchronous, contentType,
| // method, parameters, postBody,
| // requestHeaders, sanitizeJSON ...

                                        aitor.name
UI + FX
●   Prototype se centra en las funcionalidades
    “core” y no ofrece soporte para temas de
    interfaz (widgets/efectos)
●   Esta parte está implementada por la librería
    Script.aculo.us, la cual hace uso de Prototype
●   Script.aculo.us ofrece animaciones, soporte
    drag & drop y algo de widgets
●   La nueva versión 2.0 se llama Scripty2
    (reescrita desde cero: muchas mejoras)

                                           aitor.name
Otras funcionalidades
●   Utilidades para trabajar con formularios
●   Muchas extensiones a los tipos de datos
    nativos de Javascript (Array, Hash, Number,
    Object, String, RegExp...)
●   Creación de nuevos “tipos de datos” como
    ObjectRange




                                               aitor.name
Futuro
●   Extender el DOM parecía una buena idea
●   La experiencia a demostrado que fue un error
●   Hay muchos problemas con la extensión del
    DOM
    ●   Bajo rendimiento en navegadores con un DOM no
        fácilmente extendible (IE6)
    ●   El DOM de IE es un desastre
    ●   Bugs en las implementaciones del DOM
    ●   Colisiones con los nombres de métodos/atributos
        (→ getElementByClassName)
                                                aitor.name
Futuro
●   Prototype 2.0 usará la misma técnica que
    jQuery: wrappers de objetos
|   // prototype
|   [ 1, 2, 3].each( function( e) {
|     console.log( e);
|   });
|   // jquery
|   $.each( [ 1, 2, 3], function(i,e) {
|   console.log( e);
|   });
●   Incompatibilidad total con Prototype 1 aitor.name

Más contenido relacionado

La actualidad más candente

Javascript Básico
Javascript BásicoJavascript Básico
Javascript Básicocamposer
 
Javascript Clásico
Javascript ClásicoJavascript Clásico
Javascript ClásicoIrontec
 
Presentacion diseño web con jquery
Presentacion diseño web con jqueryPresentacion diseño web con jquery
Presentacion diseño web con jqueryEutobar
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con phpFer Nando
 
Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSJavier Abadía
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM DoctrineDecharlas
 
jQuery 1.3 UI eghost Julio2009
jQuery 1.3 UI eghost Julio2009jQuery 1.3 UI eghost Julio2009
jQuery 1.3 UI eghost Julio2009Irontec
 
Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1Jose Luis Orosco Marcos
 
Slides components en
Slides components enSlides components en
Slides components enJavier López
 
Fundamento de poo en php
Fundamento de poo en phpFundamento de poo en php
Fundamento de poo en phpRobert Moreira
 

La actualidad más candente (20)

Javascript Básico
Javascript BásicoJavascript Básico
Javascript Básico
 
Javascript Clásico
Javascript ClásicoJavascript Clásico
Javascript Clásico
 
Zen AJAX - Programador PHP
Zen AJAX - Programador PHPZen AJAX - Programador PHP
Zen AJAX - Programador PHP
 
Presentacion diseño web con jquery
Presentacion diseño web con jqueryPresentacion diseño web con jquery
Presentacion diseño web con jquery
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con php
 
Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJS
 
Taller de Jquery
Taller de JqueryTaller de Jquery
Taller de Jquery
 
JQuery-Tema 1
JQuery-Tema 1JQuery-Tema 1
JQuery-Tema 1
 
ORM Doctrine
ORM DoctrineORM Doctrine
ORM Doctrine
 
jQuery 1.3 UI eghost Julio2009
jQuery 1.3 UI eghost Julio2009jQuery 1.3 UI eghost Julio2009
jQuery 1.3 UI eghost Julio2009
 
dajaxproject.com
dajaxproject.comdajaxproject.com
dajaxproject.com
 
Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1
 
Creación de plugins con Grails
Creación de plugins con GrailsCreación de plugins con Grails
Creación de plugins con Grails
 
Sesion uno azuay
Sesion uno azuaySesion uno azuay
Sesion uno azuay
 
Slides components en
Slides components enSlides components en
Slides components en
 
React
ReactReact
React
 
Fundamento de poo en php
Fundamento de poo en phpFundamento de poo en php
Fundamento de poo en php
 
Web Mapping con Django
Web Mapping con DjangoWeb Mapping con Django
Web Mapping con Django
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
 
Clase 15
Clase 15Clase 15
Clase 15
 

Destacado

Presentation1
Presentation1Presentation1
Presentation1331990
 
Making singulars plurals
Making singulars pluralsMaking singulars plurals
Making singulars pluralsIrenya S
 
Communication - speaking esl
Communication - speaking eslCommunication - speaking esl
Communication - speaking eslIrenya S
 
Present perfect
Present perfectPresent perfect
Present perfectIrenya S
 
Indirect questions
Indirect questionsIndirect questions
Indirect questionsIrenya S
 

Destacado (8)

Seguretat a internet
Seguretat a internetSeguretat a internet
Seguretat a internet
 
Presentatie persuade
Presentatie persuade Presentatie persuade
Presentatie persuade
 
Chapter 2
Chapter 2Chapter 2
Chapter 2
 
Presentation1
Presentation1Presentation1
Presentation1
 
Making singulars plurals
Making singulars pluralsMaking singulars plurals
Making singulars plurals
 
Communication - speaking esl
Communication - speaking eslCommunication - speaking esl
Communication - speaking esl
 
Present perfect
Present perfectPresent perfect
Present perfect
 
Indirect questions
Indirect questionsIndirect questions
Indirect questions
 

Similar a Introducción a Prototype.js (38

Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladoresPedro Cambra
 
¿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ácticasjaespinmora
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryDavid Arango
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascriptguest030dc2
 
Charla Jquery
Charla JqueryCharla Jquery
Charla Jquerykaolong
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es VietnamAlex Casquete
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQueryDanae Aguilar Guzmán
 
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étodosDanae Aguilar Guzmán
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Airespeterpunk
 
Introducción a Django
Introducción a DjangoIntroducción a Django
Introducción a DjangoJoaquim Rocha
 
Objetos Implicitos de JSP
Objetos Implicitos de JSPObjetos Implicitos de JSP
Objetos Implicitos de JSPkelly120797
 
Introducción a JQuery
Introducción a JQueryIntroducción a JQuery
Introducción a JQueryContinuum
 

Similar a Introducción a Prototype.js (38 (20)

Jquery parte 1
Jquery parte 1Jquery parte 1
Jquery parte 1
 
Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladores
 
¿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
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQuery
 
Jquery
JqueryJquery
Jquery
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascript
 
Charla Jquery
Charla JqueryCharla Jquery
Charla Jquery
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es Vietnam
 
Javascript OOP
Javascript OOPJavascript OOP
Javascript OOP
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
 
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
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
 
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos AiresPresentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
Presentación Ruby on Rails en Softare Freedom Day 09 Buenos Aires
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
Código Bonito con PHP
Código Bonito con PHPCódigo Bonito con PHP
Código Bonito con PHP
 
Introducción a Django
Introducción a DjangoIntroducción a Django
Introducción a Django
 
9.laravel
9.laravel9.laravel
9.laravel
 
Objetos Implicitos de JSP
Objetos Implicitos de JSPObjetos Implicitos de JSP
Objetos Implicitos de JSP
 
Introducción a JQuery
Introducción a JQueryIntroducción a JQuery
Introducción a JQuery
 
Ruby para Java Developers
Ruby para Java DevelopersRuby para Java Developers
Ruby para Java Developers
 

Último

Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxazmysanros90
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaarkananubis
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.241514949
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafiosFundación YOD YOD
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA241531640
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx241522327
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..RobertoGumucio2
 

Último (20)

Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
tics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptxtics en la vida cotidiana prepa en linea modulo 1.pptx
tics en la vida cotidiana prepa en linea modulo 1.pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
R1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en minaR1600G CAT Variables de cargadores en mina
R1600G CAT Variables de cargadores en mina
 
El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.El uso de las TIC's en la vida cotidiana.
El uso de las TIC's en la vida cotidiana.
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
La era de la educación digital y sus desafios
La era de la educación digital y sus desafiosLa era de la educación digital y sus desafios
La era de la educación digital y sus desafios
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6    CREAR UN RECURSO MULTIMEDIAActividad integradora 6    CREAR UN RECURSO MULTIMEDIA
Actividad integradora 6 CREAR UN RECURSO MULTIMEDIA
 
FloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptxFloresMorales_Montserrath_M1S3AI6 (1).pptx
FloresMorales_Montserrath_M1S3AI6 (1).pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..Plan Sarmiento - Netbook del GCBA 2019..
Plan Sarmiento - Netbook del GCBA 2019..
 

Introducción a Prototype.js (38

  • 2. Historia ● Creado en 2005 por Sam Stephenson como parte del soporte AJAX de Ruby on Rails ● Proyecto externo a Rails pero muy vinculado a él ● Muy usada por developers Rails aitor.name
  • 3. Uso real aitor.name
  • 4. Principales funcionalidades ● Manipulación e inspección del DOM ● Gestión de eventos ● Extensiones a Javascript ● AJAX de alto nivel aitor.name
  • 5. DOM > Extensión ● Principal característica diferenciadora con otros frameworks ● Añade métodos (funciones) extra a los nodos del DOM ● Es automágica en navegadores que soportan modificar el “prototype” de objetos nativos | var obj = document. | getElementById( “id”); | | obj.addClassName( “clase”); aitor.name
  • 6. DOM > Acceso a los elementos ● $(id) → document.getElementById() | $( “flash”).hide(); ● También extiende elementos | // viejos navegadores (IE6) | var e = document. | getElementById( “flash”); | | e.hide(); // FAIL | $( e).hide(); // WIN aitor.name
  • 7. DOM > Acceso a los elementos ● $$(sel) → document.querySelectorAll() | // devuelve array de elementos | var links = $$( “a.ugly”); | | for( link in links) { | link.remove(); | } aitor.name
  • 8. DOM > Resumen de funcionalidad ● Navegación | // descendants, siblings, ancestors, | // previousSiblings ... ● Modificación | // absolutize, addClassName, remove, | // insert, update ... ● Estilos | // setStyle, getStyle, hide, toggle, | // getDimensions ... aitor.name
  • 9. DOM > Extensiones propias ● Funciones globales (nada nuevo) | // $$() simplificado | function $$0( selector) { | return ( $$( selector))[ 0]; | } | | $$0( “#banner img.p0rn”).show(); aitor.name
  • 10. DOM > Extensiones propias ● Extensión del DOM | Element.addMethods( { | bordea: function( element, color) { | element.setStyle( { | border: "10px solid " + color | }); | return element; // para encadenar | } | }); | | $( “id”).bordea( “pink”).show(); aitor.name
  • 11. Eventos ● La gestión de eventos es lo más doloroso en el soporte de múltiples navegadores ● Resumen: todo el mundo lo hace como manda la W3C, e IE lo hace de otra forma totalmente diferente (+ pierde memoria en algunos casos) ● Otros pequeños detalles entre navegadores aitor.name
  • 12. Eventos > Registro ● Event.observe() es la base de la gestión de eventos | function activar( event) { | var element = event.element(); | element.addClassName( “activa”); | } | | $( “bocina”).observe( “click”, | activar | ); aitor.name
  • 13. Eventos > Desregistro ● Event.stopObserving() y sus múltiples personalidades | // un evento/handler concreto | $( “buy”).stopObserving( “click”, | notifica); | | // todos los handlers de un evento | $( “buy”).stopObserving( “click”); | | // todos los eventos/handlers | $( “buy”).stopObserving(); aitor.name
  • 14. Eventos > Propagación ● Event.stop(): 2x1, previene la propagación del evento y la realización de la acción por defecto | $( “comprar”).observe( “click”, | function( evt) { | Event.stop( evt); | } | }); ● Evitamos los poco estéticos “#” al final de las URLs (por los <a href=”#” ...>) aitor.name
  • 15. Javascript > Ruby.clone() ● Prototype nació con RoR, es natural que quiera hacer Javascript lo más similar a Ruby ● Principales características ● Estilo funcional con los iteradores ● Programación OO ● Mejoras al sistema de funciones aitor.name
  • 16. Javascript > Iteradores ● Característica fundamental de Prototype ● Hace el lenguaje más “funcional” (tipo Lisp o Haskell) ● Implementado por un “mixin” llamado Enumerable ● “mixin”: conjunto de métodos (funciones) que no se usan solos, si no que se incorporan a otros objetos ● Usos principales: Array, Hash aitor.name
  • 17. Javascript > Iteradores ● Iterando con each() | [ “one”, “two”, “three”].each( | function( msg) { | alert( msg); | } | ); | | [“one”, “two”, “three”].each(alert); aitor.name
  • 18. Javascript > Iteradores ● Búsquedas con find() y findAll() | [ 1, 7, -2, -4, 5].find( | function(n) { return n < 0;} | ); | // -2 | | [ 1, 7, -2, -4, 5].findAll( | function(n) { return n < 0; } | ); | // [ -2, -4] aitor.name
  • 19. Javascript > Iteradores ● Otras funcionalidades | $$( “#main .warning”).invoke( hide); | | [“Erase”,"una",“vez”,“un”,“circo”]. | map( function(s) { | return s.charAt( 0).toUpperCase(); | }); | | // ['E', 'U', 'V', 'U', 'C'] aitor.name
  • 20. Javascript > Iteradores ● Hay muchos iteradores que simplifican el código (una vez aprendidos) | // all, any, collect, detect, each, | // eachSlice, entries, every, | // filter, find, findAll, grep, | // inGroupsOf, include, inject, | // inspect, invoke, map, max, min, | // parition, pluck, reject, select, | // size, some, sortBy, zip aitor.name
  • 21. Javascript > OOP ● Javascript es un lenguaje OO basado en prototipos ● Esto es muy útil, pero el resto del mundo usa clases ● Prototype ofrece extensiones para implementar algo que se parece a classes OOP ● Como todo en Prototype, con cierto sabor a Ruby aitor.name
  • 22. Javascript > OOP > Crear clases | var Person = Class.create( { | initialize: function(name) { | this.name = name; | }, | say: function(message) { | return this.name + ': ' + | message; | } | }); | | var paris = new Person( “Paris H”); | paris.say( “uhhh”); | | // “Paris H: uhhh” aitor.name
  • 23. Javascript > OOP > Extender clases | var Pirate = Class.create(Person, { | say: function( $super, message) { | return $super( message) + | “, yarr!”; | } | }); | | var john = new Pirate(“Long John”); | john.say( “ahoy matey”); | | // "Long John: ahoy matey, yarr!" aitor.name
  • 24. Javascript > OOP > Mixins | // base class | var IceCream = Class.create( {...}); | | // mixins | var Cookie = {...}, | Cream = {...}; | | var häagenDaz = Class.create( | IceCream, | Cookie, Cream, { | } | ); aitor.name
  • 25. Javascript > function ● En Javascript las funciones son “first-class”: son objetos en sí mismas ● Como tal tienen propiedades+métodos y se pueden manejar como otros objetos aitor.name
  • 26. Javascript > function > bind ● Fija la función a un contexto de forma que al ser llamada nos aseguramos de que “this” hace referencia a ese contexto ● Puede parecer un poco complejo al principio pero es muy útil aitor.name
  • 27. Javascript > function > bind | function message() { | return "Head and " + this; | } | | var human = message.bind( "body"); | human(); // "Head and body" | | var mrPotato = message.bind("legs"); | mrPotato(); // "Head and legs" aitor.name
  • 28. Javascript > function > bind ● Especialmente útil en gestión de eventos | var AlertOnClick = Class.create( { | initialize: function( msg) { | this.msg = msg; | }, | handleClick: function( event) { | alert( this.msg); | } | }); aitor.name
  • 29. Javascript > function > bind | var myalert = new AlertOnClick( | "Clicked!"); | | $( “foo”).observe( “click”, | myalert.handleClick | ); // FAIL ( “this” es invalido) | | $( “bar”).observe( “click”, | myalert.handleClick. | bind( myalert) | ); // WIN ( “this” == objeto) aitor.name
  • 30. AJAX ● La clase Ajax.Request permite realizar peticiones AJAX en una forma OO | new Ajax.Request( "/your/url", { | onSuccess: function( response) { | // handle the response content... | }, | onFailure: function( response) { | // handle error | } | }); aitor.name
  • 31. AJAX ● Hay diferentes tipos de callbacks | // onCreate, onLoading, onLoaded, | // onException, onComplete, on{XYZ} | // ... ● Se puede configurar la petición | // asynchronous, contentType, | // method, parameters, postBody, | // requestHeaders, sanitizeJSON ... aitor.name
  • 32. UI + FX ● Prototype se centra en las funcionalidades “core” y no ofrece soporte para temas de interfaz (widgets/efectos) ● Esta parte está implementada por la librería Script.aculo.us, la cual hace uso de Prototype ● Script.aculo.us ofrece animaciones, soporte drag & drop y algo de widgets ● La nueva versión 2.0 se llama Scripty2 (reescrita desde cero: muchas mejoras) aitor.name
  • 33. Otras funcionalidades ● Utilidades para trabajar con formularios ● Muchas extensiones a los tipos de datos nativos de Javascript (Array, Hash, Number, Object, String, RegExp...) ● Creación de nuevos “tipos de datos” como ObjectRange aitor.name
  • 34. Futuro ● Extender el DOM parecía una buena idea ● La experiencia a demostrado que fue un error ● Hay muchos problemas con la extensión del DOM ● Bajo rendimiento en navegadores con un DOM no fácilmente extendible (IE6) ● El DOM de IE es un desastre ● Bugs en las implementaciones del DOM ● Colisiones con los nombres de métodos/atributos (→ getElementByClassName) aitor.name
  • 35. Futuro ● Prototype 2.0 usará la misma técnica que jQuery: wrappers de objetos | // prototype | [ 1, 2, 3].each( function( e) { | console.log( e); | }); | // jquery | $.each( [ 1, 2, 3], function(i,e) { | console.log( e); | }); ● Incompatibilidad total con Prototype 1 aitor.name