SlideShare una empresa de Scribd logo
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ásico
camposer
 
Javascript Clásico
Javascript ClásicoJavascript Clásico
Javascript Clásico
Irontec
 
Zen AJAX - Programador PHP
Zen AJAX - Programador PHPZen AJAX - Programador PHP
Zen AJAX - Programador PHP
Juan Belón Pérez
 
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 php
Fer Nando
 
Reactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJSReactividad en Angular, React y VueJS
Reactividad en Angular, React y VueJS
Javier Abadía
 
Taller de Jquery
Taller de JqueryTaller de Jquery
Taller de Jquery
Rebecca Casais
 
JQuery-Tema 1
JQuery-Tema 1JQuery-Tema 1
JQuery-Tema 1
Renny Batista
 
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
 
dajaxproject.com
dajaxproject.comdajaxproject.com
dajaxproject.com
Jorge Bastida
 
Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1Mantenimiento de Usuarios usando MVC ver1
Mantenimiento de Usuarios usando MVC ver1
Jose Luis Orosco Marcos
 
Creación de plugins con Grails
Creación de plugins con GrailsCreación de plugins con Grails
Creación de plugins con Grails
Jose Juan R. Zuñiga
 
Slides components en
Slides components enSlides components en
Slides components enJavier López
 
React
ReactReact
Fundamento de poo en php
Fundamento de poo en phpFundamento de poo en php
Fundamento de poo en php
Robert Moreira
 
Gwt III - Avanzado
Gwt III - AvanzadoGwt III - Avanzado
Gwt III - Avanzado
Manuel Carrasco Moñino
 
Clase 15
Clase 15Clase 15
Clase 15
hydras_cs
 

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

Presentatie persuade
Presentatie persuade Presentatie persuade
Presentatie persuade
michielrijshouwer
 
Chapter 2
Chapter 2Chapter 2
Chapter 2
akhlagEslami
 
Presentation1
Presentation1Presentation1
Presentation1331990
 
Making singulars plurals
Making singulars pluralsMaking singulars plurals
Making singulars plurals
Irenya S
 
Communication - speaking esl
Communication - speaking eslCommunication - speaking esl
Communication - speaking esl
Irenya S
 
Present perfect
Present perfectPresent perfect
Present perfect
Irenya S
 
Indirect questions
Indirect questionsIndirect questions
Indirect questions
Irenya 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 javascript

Drupal7 para desarrolladores
Drupal7 para desarrolladoresDrupal7 para desarrolladores
Drupal7 para desarrolladores
Pedro 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ácticas
jaespinmora
 
Javascript en proyectos reales: jQuery
Javascript en proyectos reales: jQueryJavascript en proyectos reales: jQuery
Javascript en proyectos reales: jQuery
David Arango
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascript
guest030dc2
 
Charla Jquery
Charla JqueryCharla Jquery
Charla Jquerykaolong
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es Vietnam
Alex Casquete
 
Javascript OOP
Javascript OOPJavascript OOP
Javascript OOP
Gabriel Chertok
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
Danae 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étodos
Danae Aguilar Guzmán
 
19 javascript servidor
19 javascript servidor19 javascript servidor
19 javascript servidor
Jose Emilio Labra Gayo
 
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
peterpunk
 
Jquery 2
Jquery 2Jquery 2
Código Bonito con PHP
Código Bonito con PHPCódigo Bonito con PHP
Código Bonito con PHP
Mauricio Gelves
 
Introducción a Django
Introducción a DjangoIntroducción a Django
Introducción a Django
Joaquim Rocha
 
9.laravel
9.laravel9.laravel
Objetos Implicitos de JSP
Objetos Implicitos de JSPObjetos Implicitos de JSP
Objetos Implicitos de JSP
kelly120797
 
Introducción a JQuery
Introducción a JQueryIntroducción a JQuery
Introducción a JQuery
Continuum
 
Ruby para Java Developers
Ruby para Java DevelopersRuby para Java Developers
Ruby para Java Developers
Gustavo Andres Brey
 

Similar a Introducción a prototype javascript (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

Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
Emilio Casbas
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
CrystalRomero18
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
juanchogame18
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
AlejandraCasallas7
 
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
SERVANDOBADILLOPOLEN
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
thomasdcroz38
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
paulroyal74
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
JimmyTejadaSalizar
 
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
IsabelQuintero36
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
LilibethEstupian
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
zoecaicedosalazar
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
cdraco
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
PABLOCESARGARZONBENI
 
Trabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De ProgramaciónTrabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De Programación
SofiaCollazos
 
algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1
yuki22434
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
JulyMuoz18
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
SamuelRamirez83524
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
ValeriaAyala48
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
NajwaNimri1
 
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
AMADO SALVADOR
 

Último (20)

Inteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdfInteligencia Artificial y Ciberseguridad.pdf
Inteligencia Artificial y Ciberseguridad.pdf
 
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTALINFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
INFORME DE LAS FICHAS.docx.pdf LICEO DEPARTAMENTAL
 
Presentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The CleanPresentacion de Estado del Arte del The Clean
Presentacion de Estado del Arte del The Clean
 
Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.Desarrollo de Habilidades de Pensamiento.
Desarrollo de Habilidades de Pensamiento.
 
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.COMPARATIVO DE SUBESTACIONES AIS VS GIS.
COMPARATIVO DE SUBESTACIONES AIS VS GIS.
 
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdfTRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
TRABAJO DESARROLLO DE HABILIDADES DE PENSAMIENTO.pdf
 
Sitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajasSitios web 3.0 funciones ventajas y desventajas
Sitios web 3.0 funciones ventajas y desventajas
 
maestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdfmaestria-motores-combustion-interna-alternativos (1).pdf
maestria-motores-combustion-interna-alternativos (1).pdf
 
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..ACTIVIDAD 2P de Tecnología, 10-7, 2024..
ACTIVIDAD 2P de Tecnología, 10-7, 2024..
 
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVATECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
TECLADO ERGONÓMICO Y PANTALLAS TACTILES - GESTIÓN INTEGRAL EDUCATIVA
 
trabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6ftrabajo de tecnologia, segundo periodo 9-6f
trabajo de tecnologia, segundo periodo 9-6f
 
3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto3Redu: Responsabilidad, Resiliencia y Respeto
3Redu: Responsabilidad, Resiliencia y Respeto
 
EduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clasesEduFlex, una educación accesible para quienes no entienden en clases
EduFlex, una educación accesible para quienes no entienden en clases
 
Trabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De ProgramaciónTrabajo tecnología sobre Conceptos Básicos De Programación
Trabajo tecnología sobre Conceptos Básicos De Programación
 
algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1algebra de boole teoria.pdf texto guia.1
algebra de boole teoria.pdf texto guia.1
 
Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5Conceptos Básicos de Programación L.D 10-5
Conceptos Básicos de Programación L.D 10-5
 
Estructuras básicas_ conceptos de programación (1).docx
Estructuras básicas_ conceptos de programación  (1).docxEstructuras básicas_ conceptos de programación  (1).docx
Estructuras básicas_ conceptos de programación (1).docx
 
Conceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdfConceptos básicos de programación 10-5.pdf
Conceptos básicos de programación 10-5.pdf
 
Actividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdfActividad Conceptos básicos de programación.pdf
Actividad Conceptos básicos de programación.pdf
 
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
 

Introducción a prototype javascript

  • 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