模块定义
1 2 3 4 5 6 7 8 9
| function sayHello(name) { console.log(`Hello ${name} !`) } function sayGoodbye(name) { console.log(`Goodbye ${name} !`) }
module.exports.sayHello = sayHello
|
模块使用
1 2 3 4 5 6 7 8 9
| var common = require('common.js') Page({ helloMINA: function() { common.sayHello('MINA') }, goodbyeMINA: function() { common.sayGoodbye('MINA') } })
|
以上是最简单的使用方法.这个方法有个好处就是那个函数知道出自那里.
下面的方法更现代一些,不过有个问题是,方法出自那里不会那么清晰.所以用的时候看着办吧.
这个举例是多模块一起引入
a模块 a.js
1 2 3 4 5 6
| module.exports = { function_a(content = ''){ console.log("function_a"+content); } };
|
** b模块 b.js**
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| var module_b = { function_a:function(content = ''){ console.log("function_a"+content); }, function_b:function(content = ''){ console.log("function_b"+content); }, function_c:function(content = ''){ console.log("function_c"+content); },
};
module.exports = module_b;
|
模块工厂 modules.js
1 2 3 4 5 6
|
exports.a = require('./a.js'); exports.b = require('./b.js');
|
使用模块
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| var modules = require('modules.js');
Page(Object.assign({}, modules.a,modules.b, { data: { ... }, onLoad: function () { this.function_a('我是a模块输出'); this.function_b('我是b模块输出'); ... } ... }));
|
新心得
如果是小程序的自带的监听函数,也可以使用模块写法.也会在页面加载后就持续监听.
不过只能用上面第二种写法,就是扩展参数的办法才行,这也是这种方式的优势吧.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| .......
function doMD5Encode(toEncode) { return MD5Encode.hexMD5(toEncode); }
function onReachBottom () { if (this.data.more) { this.getMore(); } else { return; } }
module.exports = { isStringEmpty: isStringEmpty, sentHttpRequestToServer: sentHttpRequestToServer, mapToJson: mapToJson, toastSuccess: toastSuccess, doWechatPay: doWechatPay, onReachBottom: onReachBottom }
var common = require('../../utils/common.js'); Page(Object.assign({}, common,{
.....
}));
|
参考文档
MDN Web Docs Object.assign()
Object.assign(target, …sources)
参数
target: 目标对象。
sources: 源对象。
返回值:
目标对象
描述:
如果目标对象中的属性具有相同的键,则属性将被源中的属性覆盖。后来的源的属性将类似地覆盖早先的属性。