63 lines
3.7 KiB
Markdown
63 lines
3.7 KiB
Markdown
|
---
|
|||
|
id: 587d7db2367417b2b2512b8c
|
|||
|
title: Use an IIFE to Create a Module
|
|||
|
challengeType: 1
|
|||
|
videoUrl: ''
|
|||
|
localeTitle: Использование модуля IIFE для создания модуля
|
|||
|
---
|
|||
|
|
|||
|
## Description
|
|||
|
<section id="description"> <code>IIFE</code> <code>immediately invoked function expression</code> ( <code>IIFE</code> ) часто используется для группировки связанных функций в один объект или <code>module</code> . Например, более ранняя задача определила два микшина: <blockquote> функция glideMixin (obj) { <br> obj.glide = function () { <br> console.log («Скольжение по воде»); <br> }; <br> } <br> функция flyMixin (obj) { <br> obj.fly = function () { <br> console.log («Flying, wooosh!»); <br> }; <br> } </blockquote> Мы можем сгруппировать эти <code>mixins</code> в модуль следующим образом: <blockquote> let motionModule = (function () { <br> вернуть { <br> glideMixin: function (obj) { <br> obj.glide = function () { <br> console.log («Скольжение по воде»); <br> }; <br> }, <br> flyMixin: function (obj) { <br> obj.fly = function () { <br> console.log («Flying, wooosh!»); <br> }; <br> } <br> } <br> }) (); // Две скобки приводят к немедленному вызову функции </blockquote> Обратите внимание, что вы <code>immediately invoked function expression</code> ( <code>IIFE</code> ), которое возвращает объект <code>motionModule</code> . Этот возвращенный объект содержит все поведение <code>mixin</code> как свойства объекта. Преимущество шаблона <code>module</code> заключается в том, что все поведение движения может быть упаковано в один объект, который затем может использоваться другими частями вашего кода. Вот пример использования: <blockquote> motionModule.glideMixin (уток); <br> duck.glide (); </blockquote></section>
|
|||
|
|
|||
|
## Instructions
|
|||
|
<section id="instructions"> Создать <code>module</code> с именем <code>funModule</code> , чтобы обернуть два <code>mixins</code> <code>isCuteMixin</code> и <code>singMixin</code> . <code>funModule</code> должен возвращать объект. </section>
|
|||
|
|
|||
|
## Tests
|
|||
|
<section id='tests'>
|
|||
|
|
|||
|
```yml
|
|||
|
tests:
|
|||
|
- text: <code>funModule</code> должен быть определен и возвращать объект.
|
|||
|
testString: 'assert(typeof funModule === "object", "<code>funModule</code> should be defined and return an object.");'
|
|||
|
- text: <code>funModule.isCuteMixin</code> должен получить доступ к функции.
|
|||
|
testString: 'assert(typeof funModule.isCuteMixin === "function", "<code>funModule.isCuteMixin</code> should access a function.");'
|
|||
|
- text: <code>funModule.singMixin</code> должен получить доступ к функции.
|
|||
|
testString: 'assert(typeof funModule.singMixin === "function", "<code>funModule.singMixin</code> should access a function.");'
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
</section>
|
|||
|
|
|||
|
## Challenge Seed
|
|||
|
<section id='challengeSeed'>
|
|||
|
|
|||
|
<div id='js-seed'>
|
|||
|
|
|||
|
```js
|
|||
|
let isCuteMixin = function(obj) {
|
|||
|
obj.isCute = function() {
|
|||
|
return true;
|
|||
|
};
|
|||
|
};
|
|||
|
let singMixin = function(obj) {
|
|||
|
obj.sing = function() {
|
|||
|
console.log("Singing to an awesome tune");
|
|||
|
};
|
|||
|
};
|
|||
|
|
|||
|
```
|
|||
|
|
|||
|
</div>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
</section>
|
|||
|
|
|||
|
## Solution
|
|||
|
<section id='solution'>
|
|||
|
|
|||
|
```js
|
|||
|
// solution required
|
|||
|
```
|
|||
|
</section>
|