|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 月下孤井 于 2023-2-9 21:55 编辑
let Module = (() => {
let module_list = {};
function define(name, rely, callback) {
if (module_list[name]) {
console.log("The module have already existed!")
} else {
for (let i = 0; i < rely.length; i++) {
rely[i] = module_list[rely[i]];
}
module_list[name] = callback.apply(callback, rely);
}
}
function require(name) {
if (module_list[name]) {
return module_list[name]
} else {
console.log("There is no such module!")
}
}
let api = {
"define": define,
"require": require
};
return api;
})();
Module.define("test", [], () => {
function sayHello(name) {
return name + ",你好啊";
}
return {
"sayHello": sayHello
}
})
Module.define("haha", [], () => {
function gotoHZ(name) {
return name + "要去杭州玩了";
}
return {
"gotoHZ": gotoHZ
}
})
Module.define("my_module", ["test", "haha"], (test, haha) => {
let name = "andrew";
function sayHello2() {
let str = test.sayHello(name);
console.log(haha.gotoHZ("章炜"))
str = str + ",今天天气不错噢";
return str;
}
return {
"sayHello2": sayHello2
}
})
console.log(Module.require('my_module').sayHello2())
console.log(Module.require('test').sayHello("steve"))
本帖最后由 不二如是 于 2023-7-19 10:22 编辑
语句看不懂,还是函数关系看不懂,还是全都看不懂。。。
这段代码实现了一个简单的模块加载器,主要功能有:
1. 定义Module对象,实现模块的定义(define)和加载(require)
2. define方法用来定义模块,它接受三个参数:模块名称、依赖模块列表、模块初始化函数
3. require方法用来加载模块,根据模块名称返回模块导出的接口
4. 模块初始化函数可以接收依赖模块的导出作为参数,并返回当前模块的对外接口
5. 通过闭包保存模块列表module_list,实现模块instances隔离和缓存
6. 加载一个模块时,会先加载它所依赖的模块
7. test、haha、my_module演示了模块的定义和加载过程
8. my_module依赖test和haha模块,在它的初始化函数中加载依赖并使用
9. 最后加载my_module模块,打印输出sayHello2函数的执行结果
这个模块加载器实现了CommonJS规范的基本功能,支持模块定义、依赖声明、依赖加载等,是一个简单的JS模块系统。
|
|