并不是什么新鲜东西,很多JS库都使用这种方式进行模块化封装,便于各种情况下的引用。
假设开发完成的JS库(模块):myjssdk.js,使用原生及AMD的引用方式如下:
1、原生方式:
<script src="//www.test.com/myjssdk.js"></script>
2、AMD方式:
<!-- 需要先引入requirejs库,并在config文件中注册“myjssdk” -->
<script>
require(['myjssdk'], function(jssdk){
jssdk.info();
});
</script>
实现方式:
(function (global, factory) {
if (typeof define === 'function' && define.amd) {
// AMD规范
define(factory);
} else {
// 浏览器注册全局对象,自定义对象名:MyJSSDK
global.MyJSSDK = factory();
}
})(this, (function () {
//主要业务逻辑
function say() {
console.log('hello jssdk');
}
//对外暴露方法
return {
say: say
}
}))
还可以按照这种方式继续扩展,支持CMD、CommonJS、ES6等模块的封装。