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

2.4 KiB

id title challengeType forumTopicId dashedName
587d7db2367417b2b2512b8c Usar uma IIFE para criar um módulo 1 301332 use-an-iife-to-create-a-module

--description--

Uma expressão de função imediatamente invocada (IIFE) é frequentemente utilizado para agrupar funcionalidades relacionadas para um único objeto ou módulo. Por exemplo, um desafio anterior definiu dois mixins:

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

Nos podemos agrupar esses mixins em um módulo como o seguinte:

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!");
      };
    }
  }
})();

Note que você possui uma expressão de função imediatamente invocada (IIFE) que retorna um objeto motionModule. Esse objeto retornado contém todos os comportamentos de mixin como propriedades do objeto. A vantagem do padrão módulo é que todos os comportamentos de movimento podem ser embalados em um único objeto que pode em seguida ser usado por outras partes do seu código. Aqui está um exemplo utilizando isso:

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

--instructions--

Crie um módulo chamado funModule para embrulhar os dois mixins isCuteMixin e singMixin. funModule deve retornar um objeto.

--hints--

funModule deve ser definido e retornar um objeto.

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

funModule.isCuteMixin deve acessar uma função.

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

funModule.singMixin deve acessar uma função.

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");
    }
  };
})();