2.3 KiB
id, title, challengeType, forumTopicId, dashedName
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");
}
};
})();