freeCodeCamp/curriculum/challenges/espanol/02-javascript-algorithms-an.../object-oriented-programming/use-an-iife-to-create-a-mod...

2.3 KiB

id title challengeType forumTopicId dashedName
587d7db2367417b2b2512b8c Utiliza una IIFE para crear un módulo 1 301332 use-an-iife-to-create-a-module

--description--

Una expresión de función inmediatamente invocada (IIFE) se utiliza a menudo para agrupar la funcionalidad relacionada en un solo objeto o módulo. Por ejemplo, en el desafío anterior se definieron dos "mixins":

function glideMixin(obj) {
  obj.glide = function() {
    console.log("Gliding on the water");
  };
}
function flyMixin(obj) {
  obj.fly = function() {
    console.log("Flying, wooosh!");
  };
}

Podemos agrupar estos mixins en un módulo:

let motionModule = (function () {
  return {
    glideMixin: function(obj) {
      obj.glide = function() {
        console.log("Gliding on the water");
      };
    },
    flyMixin: function(obj) {
      obj.fly = function() {
        console.log("Flying, wooosh!");
      };
    }
  }
})();

Ten en cuenta que has invocado una IIFE que devuelve un objeto motionModule. El objeto devuelto contiene todos los comportamientos de los mixins como propiedades del objeto. La ventaja del patrón del módulo es que todos los comportamientos de movimiento pueden ser empaquetados en un solo objeto que puede ser usado por otras partes del código. Así se debe utilizar:

motionModule.glideMixin(duck);
duck.glide();

--instructions--

Crea un módulo llamado funModule para envolver los dos mixins isCuteMixin y singMixin. funModule debe devolver un objeto.

--hints--

funModule debe ser definido y devolver un objeto.

assert(typeof funModule === 'object');

funModule.isCuteMixin debe acceder a una función.

assert(typeof funModule.isCuteMixin === 'function');

funModule.singMixin debe acceder a una función.

assert(typeof funModule.singMixin === 'function');

--seed--

--seed-contents--

let isCuteMixin = function(obj) {
  obj.isCute = function() {
    return true;
  };
};
let singMixin = function(obj) {
  obj.sing = function() {
    console.log("Singing to an awesome tune");
  };
};

--solutions--

const funModule = (function () {
  return {
    isCuteMixin: obj => {
      obj.isCute = () => true;
    },
    singMixin: obj => {
      obj.sing = () => console.log("Singing to an awesome tune");
    }
  };
})();