--- id: 587d7db2367417b2b2512b8c title: Use an IIFE to Create a Module challengeType: 1 videoUrl: '' localeTitle: 使用IIFE创建模块 --- ## Description
immediately invoked function expressionIIFE )通常用于将相关功能分组到单个对象或module 。例如,早期的挑战定义了两个mixins:
function glideMixin(obj){
obj.glide = function(){
console.log(“在水面上滑行”);
};
}
function flyMixin(obj){
obj.fly = function(){
console.log(“Flying,wooosh!”);
};
}
我们可以将这些mixins分组到一个模块中,如下所示:
让motionModule =(function(){
返回{
glideMixin:function(obj){
obj.glide = function(){
console.log(“在水面上滑行”);
};
},
flyMixin:function(obj){
obj.fly = function(){
console.log(“Flying,wooosh!”);
};
}
}
})(); //两个括号使得函数立即被调用
请注意,您有一个immediately invoked function expressionIIFE ),它返回一个对象motionModule 。此返回对象包含作为对象属性的所有mixin行为。 module模式的优点是可以将所有运动行为打包到单个对象中,然后可以由代码的其他部分使用。以下是使用它的示例:
motionModule.glideMixin(鸭);
duck.glide();
## Instructions
创建一个名为funModulemodule来包装两个mixins isCuteMixinsingMixinfunModule应该返回一个对象。
## Tests
```yml tests: - text: 应该定义funModule并返回一个对象。 testString: assert(typeof funModule === "object"); - text: funModule.isCuteMixin应该访问一个函数。 testString: assert(typeof funModule.isCuteMixin === "function"); - text: funModule.singMixin应该访问一个函数。 testString: assert(typeof funModule.singMixin === "function"); ```
## Challenge 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"); }; }; ```
## Solution
```js // solution required ```