SlideShare uma empresa Scribd logo
1 de 24
Baixar para ler offline
Javascript
Orientado a
Objetos
Estudiante de Analista en Tecnologías de la Información.
Trabajé TCS Uy, TCS Arg, GuruYu, moove-it y ahora en InfUy.
Desarrollo web apps en ruby, rails, javascript, java, felx (sí todavía existe) y sap




                                                                          @iamcherta
                                                                           cherta.info
Por qué orientado a objetos
Cómo llegamos hasta acá


● El browser como plataforma por
  encima del SO
● Javascript es el único lenguaje   Aplicaciones
  del browser
                                        más
● La capacidad de los clientes es
  mayor                              complejas
● Nuestras necesidades no son
  las mismas que hace 10 años.
Que desafíos enfrentamos

    Nuevas
                             Más código
funcionalidades




Más puntos de
                           Menor visibilidad
    fallos




Menor calidad
Qué es la programación orientada a
objetos
● Una forma de entender y resolver el
  problema

● Encapsula responsabilidades

● Ordena los conceptos
Prototipos en vez de clases
● Reuso de comportamiento se hace mediante
  la decoración o (clonación) de objetos
  existentes que sirven de prototipos.


● Programación basada en ejemplos
Objeto (Clase)
                                                        Clases
function Person() { }


                                                        Objetos
var person1 = new Person();
var person2 = new Person();




                              Para crear un nuevo ejemplo de un
                              objeto utilizamos la declaración new,
                              asignando el resultado (que es de tipo
                              Person) a una variable para tener
                              acceso más tarde.
Constructor

function Person() {
  console.log('Person instantiated');
}

var person1 = new Person();
var person2 = new Person();




   Cada acción declarada en la clase es
   ejecutada en el momento de la
   creación de la instancia.
Atributos

function Person(gender) {
  this.gender = gender;
  console.log('Person instantiated');
}

male = new Person('Male');
female = new Person('Female');



Los atributos y métodos se agregan al objeto prototype de la ¨clase¨


this hace referencia al objeto prototype que contiende Person


Cada ejemplo o instancia contendrá la propiedad gender
Métodos
function Person(gender) {
  this.gender = gender;
  console.log('Person instantiated');
}

Person.prototype.sayGender = function()
{
   console.log(this.gender);
};

male = new Person('Male');
male.sayGender();



Para definir un método asignamos una función a un
atributo de la clase




                                                    Sigue
Métodos II
    ...

    person1 = new Person('Male');

    var genderTeller = person1.sayGender;
    person1.sayGender(); // prints 'Male'
    genderTeller(); // prints undefined
    alert(genderTeller === person1.sayGender); // prints true
    alert(genderTeller === Person.prototype.sayGender); // prints true


No existen métodos
por objetos. Todas
  las referencias
apuntan a la misma
      función.              Javascript
                            "bindea" el
                        contexto del objeto
                           a la función
                                       genderTeller.call(person1); //prints
                                       'Male'
Herencia
function Person() {} // define the Person Class

Person.prototype.walk = function(){
   console.log('I am walking!');
};
Person.prototype.sayHello = function(){
   console.log('hello');
};
function Student() {
   Person.call(this); // Call the parent constructor
}

Student.prototype = new Person(); // inherit Person

Student.prototype.constructor = Student; // correct the constructor
pointer because it points to Person

// replace the sayHello method
Student.prototype.sayHello = function(){
  console.log('hi, I am a student');
}

Student.prototype.sayGoodBye = function(){ // add sayGoodBye method
  console.log('goodBye');
Herencia II
      var student1 = new Student();
      student1.sayHello();
      student1.walk();
      student1.sayGoodBye();

      // check inheritance
      console.log(student1 instanceof Person); // true
      console.log(student1 instanceof Student); // true




                   Sobreescribir el prototype de la clase hija no corrige el constructor
           Nota:
                   (Hay que hacerlo manualmente)

                   La clase hija Student no necesita conocer la implementación del
Encapsulamiento:   padre (el método walk por ejemplo) y sin embargo puede usarlo.
                   Tampoco es necesario definirlo a menos que queramos cambiarlo.
Recapitulando
Closures
                               makeFunc devuelve
function makeFunc() {          displayName antes que esta
  var name = "Mozilla";
  function displayName() {     se ejecute.
    alert(name);
  }
  return displayName;
                               Podemos pensar que la
}                              variable name no se necesita
                               más después de ejecutar
var myFunc = makeFunc();       makeFunc() //NOT!
myFunc();

                               La realidad es que myFunc es
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
                               una closure.
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
//Sobró   ppt   para   abajo
Qué es una closure
Un tipo de objeto que combina: una función y el
entorno (scope) en la cual esta función es
creada.
function makeAdder(x) {
  return function(y) {
     return x + y;
  };
}
                                   add5 y add10 son
var add5 = makeAdder(5);            dos closures que
var add10 = makeAdder(10);        comparten el body
console.log(add5(2)); // 7         de la función pero
console.log(add10(2)); // 12      contienen diferentes
                                        scopes.
Closures en el mundo real

Una closure es un tipo de objeto que nos permite
asociar datos (el environment) con una función
que trabaje sobre esos datos.

Un objeto permite asociar datos (propiedades)
con uno o más métodos (funciones) que trabaje
sobre esos datos.

Podemos usar closures donde normalmente
usaríamos un objeto con un sólo método. Por
ejemplo: eventos.
Closures en el mundo real (cont.)
function makeSizer(size) {
  return function() {
     document.body.style.fontSize = size + 'px';
  };
}

var size12 = makeSizer(12);
var size14 = makeSizer(14);
var size16 = makeSizer(16);

document.getElementById('size-12').onclick = size12;
document.getElementById('size-14').onclick = size14;
document.getElementById('size-16').onclick = size16;
Closures en el mundo real (cont.)
var Counter = (function() {
  var privateCounter = 0;                Creamos una función anónima y
  function changeBy(val) {               la llamamos inmediatamente
    privateCounter += val;
  }                                         El scope es compartido por las
  return {                                  tres closures.
    increment: function() {
       changeBy(1);                           Todo lo que no se retorna no se
    },                                        puede acceder desde fuera.
    decrement: function() {
       changeBy(-1);
    },
    value: function() {
       return privateCounter;
    }
  }
})();

alert(Counter.value()); /* Alerts 0 */
Counter.increment();
Counter.increment();
alert(Counter.value()); /* Alerts 2 */
Counter.decrement();
alert(Counter.value()); /* Alerts 1 */
Closures cuando

● Usaríamos un objeto con un sólo método:
  Eventos, callbacks, etc.
● Nos interesa privatizar ciertos métodos y sólo
  exponer ciertas interfaces.

Característica:
● Son más caras en términos de memoria /
  procesamiento
Prototype cuando

● Queremos modelar objetos, herencias y
  polimorfismos.
● El comportamiento de un objeto puede ser
  modificado por un conjunto de métodos.

Característica:
● Podemos mutar el comportamiento del objeto
  en cualquier momento
Para finalizar
"Las prácticas ya no tienen que ver con lo
necesario, lo razonable o lo pertinente si no
con aquello que es posible hacer -que se
convierte, fatalmente, en aquello que debemos
hacer."
                               Sandino Núñez, Prohibido Pensar




"Existe el medio y la tecnología mucho antes
que aparezca la necesidad o la razón."
                               Sandino Núñez, Prohibido Pensar
Referencias
https://developer.mozilla.org/en-US/docs/JavaScript/Introduction_to_Object-
Oriented_JavaScript
https://developer.mozilla.org/en-
US/docs/JavaScript/Reference/Global_Objects/Object/create
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Object
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/instanceof
https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/typeof
https://developer.mozilla.org/en-US/docs/JavaScript/Guide/Closures

Mais conteúdo relacionado

Mais procurados

Constructores en java(grupo 8)
Constructores en java(grupo 8)Constructores en java(grupo 8)
Constructores en java(grupo 8)
Manuel Ch.
 
Investigacion v unidad
Investigacion v unidadInvestigacion v unidad
Investigacion v unidad
Elena Perz
 

Mais procurados (18)

Jyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumeradosJyoc java-cap10 clases complementarias y enumerados
Jyoc java-cap10 clases complementarias y enumerados
 
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
SCJP, Clase 1: Introducción al curso, Intro a Java, Declaración y Control de ...
 
Clase 5 funciones en javaScript
Clase 5 funciones en javaScriptClase 5 funciones en javaScript
Clase 5 funciones en javaScript
 
Clase 6 objetos de javaScript
Clase 6 objetos de javaScriptClase 6 objetos de javaScript
Clase 6 objetos de javaScript
 
Javascript Módulo 5 - Bucles, Arrays. Funciones como objectos. Ámbitos. Cierr...
Javascript Módulo 5 - Bucles, Arrays. Funciones como objectos. Ámbitos. Cierr...Javascript Módulo 5 - Bucles, Arrays. Funciones como objectos. Ámbitos. Cierr...
Javascript Módulo 5 - Bucles, Arrays. Funciones como objectos. Ámbitos. Cierr...
 
Clase 7 objetos globales de javaScript
Clase 7 objetos globales de javaScriptClase 7 objetos globales de javaScript
Clase 7 objetos globales de javaScript
 
Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...
Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...
Javascript Módulo 7 - PROFUNDIZACIÓN EN ARRAYS, OBJETOS, PROPIEDADES, MÉTODOS...
 
Curso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubsCurso TDD Ruby on Rails #06: Mocks y stubs
Curso TDD Ruby on Rails #06: Mocks y stubs
 
Definición de clases en POO
Definición de clases en POODefinición de clases en POO
Definición de clases en POO
 
Jyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salidaJyoc java-cap01 tipos de datos y entrada-salida
Jyoc java-cap01 tipos de datos y entrada-salida
 
Constructores en java(grupo 8)
Constructores en java(grupo 8)Constructores en java(grupo 8)
Constructores en java(grupo 8)
 
Investigacion v unidad
Investigacion v unidadInvestigacion v unidad
Investigacion v unidad
 
Modelo Persistente
Modelo PersistenteModelo Persistente
Modelo Persistente
 
Codigo
CodigoCodigo
Codigo
 
Tema2
Tema2Tema2
Tema2
 
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
Javascript Módulo 5 - javascript sentencia, expresión, variable, función - Un...
 
C++
C++C++
C++
 
Programación en c++
Programación en c++Programación en c++
Programación en c++
 

Semelhante a Javascript OOP

Object Oriented Javascript
Object Oriented JavascriptObject Oriented Javascript
Object Oriented Javascript
Gabriel Chertok
 
Todo lo que un desarrollador no puede desconocer de javascript tutorial j q...
Todo lo que un desarrollador no puede desconocer de javascript   tutorial j q...Todo lo que un desarrollador no puede desconocer de javascript   tutorial j q...
Todo lo que un desarrollador no puede desconocer de javascript tutorial j q...
Marcelino Ortiz
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docx
ssuser2e6b96
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascript
El Jota
 
OOP-JS pjs
OOP-JS pjsOOP-JS pjs
OOP-JS pjs
Jona Val
 
OOP.JAVAS pjs
OOP.JAVAS pjsOOP.JAVAS pjs
OOP.JAVAS pjs
Jona Val
 

Semelhante a Javascript OOP (20)

Object Oriented Javascript
Object Oriented JavascriptObject Oriented Javascript
Object Oriented Javascript
 
Jquery parte 1
Jquery parte 1Jquery parte 1
Jquery parte 1
 
Intro aplicaciones web con php
Intro aplicaciones web con phpIntro aplicaciones web con php
Intro aplicaciones web con php
 
Jquery 2
Jquery 2Jquery 2
Jquery 2
 
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
 
JavaScript no es Vietnam
JavaScript no es VietnamJavaScript no es Vietnam
JavaScript no es Vietnam
 
Manual de usuario
Manual de usuarioManual de usuario
Manual de usuario
 
Todo lo que un desarrollador no puede desconocer de javascript tutorial j q...
Todo lo que un desarrollador no puede desconocer de javascript   tutorial j q...Todo lo que un desarrollador no puede desconocer de javascript   tutorial j q...
Todo lo que un desarrollador no puede desconocer de javascript tutorial j q...
 
Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6Introducción al desarrollo Web: Frontend con Angular 6
Introducción al desarrollo Web: Frontend con Angular 6
 
Curso de Desarrollo Web 2
Curso de Desarrollo Web 2Curso de Desarrollo Web 2
Curso de Desarrollo Web 2
 
Taller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con DjangoTaller de introducción al desarrollo web con Django
Taller de introducción al desarrollo web con Django
 
Buenas prácticas para la construcción de software
Buenas prácticas para la construcción de softwareBuenas prácticas para la construcción de software
Buenas prácticas para la construcción de software
 
10.Polimorfismo Java
10.Polimorfismo Java10.Polimorfismo Java
10.Polimorfismo Java
 
Programación orientada a objetos (I)
Programación orientada a objetos (I)Programación orientada a objetos (I)
Programación orientada a objetos (I)
 
Ejercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docxEjercicio de automatizacion IntelliJ+reporte.docx
Ejercicio de automatizacion IntelliJ+reporte.docx
 
El Mal Odiado Javascript
El Mal Odiado JavascriptEl Mal Odiado Javascript
El Mal Odiado Javascript
 
Microservicios con Quarkus
Microservicios con QuarkusMicroservicios con Quarkus
Microservicios con Quarkus
 
OOP-JS pjs
OOP-JS pjsOOP-JS pjs
OOP-JS pjs
 
OOP.JAVAS pjs
OOP.JAVAS pjsOOP.JAVAS pjs
OOP.JAVAS pjs
 
Todo Javascript para canibales
Todo Javascript para canibalesTodo Javascript para canibales
Todo Javascript para canibales
 

Último

Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
AnnimoUno1
 

Último (11)

Avances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estosAvances tecnológicos del siglo XXI y ejemplos de estos
Avances tecnológicos del siglo XXI y ejemplos de estos
 
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptxEVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
EVOLUCION DE LA TECNOLOGIA Y SUS ASPECTOSpptx
 
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdfRefrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
Refrigerador_Inverter_Samsung_Curso_y_Manual_de_Servicio_Español.pdf
 
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptxPROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
PROYECTO FINAL. Tutorial para publicar en SlideShare.pptx
 
How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.How to use Redis with MuleSoft. A quick start presentation.
How to use Redis with MuleSoft. A quick start presentation.
 
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptxEL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
EL CICLO PRÁCTICO DE UN MOTOR DE CUATRO TIEMPOS.pptx
 
Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21Innovaciones tecnologicas en el siglo 21
Innovaciones tecnologicas en el siglo 21
 
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
Resistencia extrema al cobre por un consorcio bacteriano conformado por Sulfo...
 
Avances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvanaAvances tecnológicos del siglo XXI 10-07 eyvana
Avances tecnológicos del siglo XXI 10-07 eyvana
 
pruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNITpruebas unitarias unitarias en java con JUNIT
pruebas unitarias unitarias en java con JUNIT
 
Modulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdfModulo-Mini Cargador.................pdf
Modulo-Mini Cargador.................pdf
 

Javascript OOP

  • 2. Estudiante de Analista en Tecnologías de la Información. Trabajé TCS Uy, TCS Arg, GuruYu, moove-it y ahora en InfUy. Desarrollo web apps en ruby, rails, javascript, java, felx (sí todavía existe) y sap @iamcherta cherta.info
  • 3. Por qué orientado a objetos
  • 4. Cómo llegamos hasta acá ● El browser como plataforma por encima del SO ● Javascript es el único lenguaje Aplicaciones del browser más ● La capacidad de los clientes es mayor complejas ● Nuestras necesidades no son las mismas que hace 10 años.
  • 5. Que desafíos enfrentamos Nuevas Más código funcionalidades Más puntos de Menor visibilidad fallos Menor calidad
  • 6. Qué es la programación orientada a objetos ● Una forma de entender y resolver el problema ● Encapsula responsabilidades ● Ordena los conceptos
  • 7. Prototipos en vez de clases ● Reuso de comportamiento se hace mediante la decoración o (clonación) de objetos existentes que sirven de prototipos. ● Programación basada en ejemplos
  • 8. Objeto (Clase) Clases function Person() { } Objetos var person1 = new Person(); var person2 = new Person(); Para crear un nuevo ejemplo de un objeto utilizamos la declaración new, asignando el resultado (que es de tipo Person) a una variable para tener acceso más tarde.
  • 9. Constructor function Person() { console.log('Person instantiated'); } var person1 = new Person(); var person2 = new Person(); Cada acción declarada en la clase es ejecutada en el momento de la creación de la instancia.
  • 10. Atributos function Person(gender) { this.gender = gender; console.log('Person instantiated'); } male = new Person('Male'); female = new Person('Female'); Los atributos y métodos se agregan al objeto prototype de la ¨clase¨ this hace referencia al objeto prototype que contiende Person Cada ejemplo o instancia contendrá la propiedad gender
  • 11. Métodos function Person(gender) { this.gender = gender; console.log('Person instantiated'); } Person.prototype.sayGender = function() { console.log(this.gender); }; male = new Person('Male'); male.sayGender(); Para definir un método asignamos una función a un atributo de la clase Sigue
  • 12. Métodos II ... person1 = new Person('Male'); var genderTeller = person1.sayGender; person1.sayGender(); // prints 'Male' genderTeller(); // prints undefined alert(genderTeller === person1.sayGender); // prints true alert(genderTeller === Person.prototype.sayGender); // prints true No existen métodos por objetos. Todas las referencias apuntan a la misma función. Javascript "bindea" el contexto del objeto a la función genderTeller.call(person1); //prints 'Male'
  • 13. Herencia function Person() {} // define the Person Class Person.prototype.walk = function(){ console.log('I am walking!'); }; Person.prototype.sayHello = function(){ console.log('hello'); }; function Student() { Person.call(this); // Call the parent constructor } Student.prototype = new Person(); // inherit Person Student.prototype.constructor = Student; // correct the constructor pointer because it points to Person // replace the sayHello method Student.prototype.sayHello = function(){ console.log('hi, I am a student'); } Student.prototype.sayGoodBye = function(){ // add sayGoodBye method console.log('goodBye');
  • 14. Herencia II var student1 = new Student(); student1.sayHello(); student1.walk(); student1.sayGoodBye(); // check inheritance console.log(student1 instanceof Person); // true console.log(student1 instanceof Student); // true Sobreescribir el prototype de la clase hija no corrige el constructor Nota: (Hay que hacerlo manualmente) La clase hija Student no necesita conocer la implementación del Encapsulamiento: padre (el método walk por ejemplo) y sin embargo puede usarlo. Tampoco es necesario definirlo a menos que queramos cambiarlo.
  • 16. Closures makeFunc devuelve function makeFunc() { displayName antes que esta var name = "Mozilla"; function displayName() { se ejecute. alert(name); } return displayName; Podemos pensar que la } variable name no se necesita más después de ejecutar var myFunc = makeFunc(); makeFunc() //NOT! myFunc(); La realidad es que myFunc es //Sobró ppt para abajo //Sobró ppt para abajo una closure. //Sobró ppt para abajo //Sobró ppt para abajo //Sobró ppt para abajo //Sobró ppt para abajo //Sobró ppt para abajo //Sobró ppt para abajo //Sobró ppt para abajo
  • 17. Qué es una closure Un tipo de objeto que combina: una función y el entorno (scope) en la cual esta función es creada. function makeAdder(x) { return function(y) { return x + y; }; } add5 y add10 son var add5 = makeAdder(5); dos closures que var add10 = makeAdder(10); comparten el body console.log(add5(2)); // 7 de la función pero console.log(add10(2)); // 12 contienen diferentes scopes.
  • 18. Closures en el mundo real Una closure es un tipo de objeto que nos permite asociar datos (el environment) con una función que trabaje sobre esos datos. Un objeto permite asociar datos (propiedades) con uno o más métodos (funciones) que trabaje sobre esos datos. Podemos usar closures donde normalmente usaríamos un objeto con un sólo método. Por ejemplo: eventos.
  • 19. Closures en el mundo real (cont.) function makeSizer(size) { return function() { document.body.style.fontSize = size + 'px'; }; } var size12 = makeSizer(12); var size14 = makeSizer(14); var size16 = makeSizer(16); document.getElementById('size-12').onclick = size12; document.getElementById('size-14').onclick = size14; document.getElementById('size-16').onclick = size16;
  • 20. Closures en el mundo real (cont.) var Counter = (function() { var privateCounter = 0; Creamos una función anónima y function changeBy(val) { la llamamos inmediatamente privateCounter += val; } El scope es compartido por las return { tres closures. increment: function() { changeBy(1); Todo lo que no se retorna no se }, puede acceder desde fuera. decrement: function() { changeBy(-1); }, value: function() { return privateCounter; } } })(); alert(Counter.value()); /* Alerts 0 */ Counter.increment(); Counter.increment(); alert(Counter.value()); /* Alerts 2 */ Counter.decrement(); alert(Counter.value()); /* Alerts 1 */
  • 21. Closures cuando ● Usaríamos un objeto con un sólo método: Eventos, callbacks, etc. ● Nos interesa privatizar ciertos métodos y sólo exponer ciertas interfaces. Característica: ● Son más caras en términos de memoria / procesamiento
  • 22. Prototype cuando ● Queremos modelar objetos, herencias y polimorfismos. ● El comportamiento de un objeto puede ser modificado por un conjunto de métodos. Característica: ● Podemos mutar el comportamiento del objeto en cualquier momento
  • 23. Para finalizar "Las prácticas ya no tienen que ver con lo necesario, lo razonable o lo pertinente si no con aquello que es posible hacer -que se convierte, fatalmente, en aquello que debemos hacer." Sandino Núñez, Prohibido Pensar "Existe el medio y la tecnología mucho antes que aparezca la necesidad o la razón." Sandino Núñez, Prohibido Pensar