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

3.6 KiB

id title localeTitle challengeType
587d7db2367417b2b2512b8c Use an IIFE to Create a Module Utilice un IIFE para crear un módulo 1

Description

Una immediately invoked function expression ( IIFE ) se usa a menudo para agrupar la funcionalidad relacionada en un solo objeto o module . Por ejemplo, un desafío anterior definió 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 de la siguiente manera:
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!");
      };
    }
  }
}) (); // The two parentheses cause the function to be immediately invoked
Tenga en cuenta que tiene una immediately invoked function expression ( IIFE ) que devuelve un objeto motionModule . Este objeto devuelto contiene todos los comportamientos de mixin como propiedades del objeto. La ventaja del patrón del module es que todos los comportamientos de movimiento se pueden empaquetar en un solo objeto que luego pueden ser utilizados por otras partes de su código. Aquí hay un ejemplo usándolo:
motionModule.glideMixin(duck);
duck.glide();

Instructions

Crea un module llamado funModule para envolver los dos mixins isCuteMixin y singMixin . funModule debería devolver un objeto.

Tests

tests:
  - text: <code>funModule</code> debe definirse y devolver un objeto.
    testString: 'assert(typeof funModule === "object", "<code>funModule</code> should be defined and return an object.");'
  - text: <code>funModule.isCuteMixin</code> debe acceder a una función.
    testString: 'assert(typeof funModule.isCuteMixin === "function", "<code>funModule.isCuteMixin</code> should access a function.");'
  - text: <code>funModule.singMixin</code> debe acceder a una función.
    testString: 'assert(typeof funModule.singMixin === "function", "<code>funModule.singMixin</code> should access a function.");'

Challenge Seed

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

Solution

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