一、了解立即调用函数表达(IIFE)
JavaScript 中的一个常见模式就是,函数在声明后立刻执行:
1
2
3
4
|
(function () {
console.log("Chirp, chirp!");
})();
|
这是一个匿名函数表达式
,立即执行并输出 Chirp, chirp!。
请注意,函数没有名称,也不存储在变量中
。
函数表达式末尾的两个括号()会让它被立即执行或调用。
这种模式被叫做立即调用函数表达式(immediately invoked function expression) 或者IIFE。
二、使用 IIFE 创建一个模块
一个立即调用函数表达式(IIFE)通常用于将相关功能分组到单个对象或者是 module 中
1
2
3
4
5
6
7
8
9
10
11
|
function glideMixin(obj) {
obj.glide = function() {
console.log("Gliding on the water");
};
}
function flyMixin(obj) {
obj.fly = function() {
console.log("Flying, wooosh!");
};
}
|
可以将这些 mixins 分成以下模块:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
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!");
};
}
}
})();
|
注意: 一个立即调用函数表达式(IIFE)返回了一个 motionModule 对象。
返回的这个对象包含了作为对象属性的所有 mixin 行为。
module 模式的优点是,所有的运动相关的行为都可以打包成一个对象,然后由代码的其他部分使用。
下面是一个使用它的例子:
1
2
3
4
5
6
7
8
|
let duck = {
name: "Donald",
numLegs: 2
};
motionModule.glideMixin(duck);
duck.glide(); // Gliding on the water
|