模块封装
程序员文章站
2022-04-23 17:19:41
var MyModules = (function Manager(){ // 保存方法 var modules = {}; // 传方法名,参数,方法 方法的参数由deps提供 function define(name, deps, impl) { // 将模块中的方法给deps 作为下一个函数的... ......
var mymodules = (function manager(){ // 保存方法 var modules = {}; // 传方法名,参数,方法 方法的参数由deps提供 function define(name, deps, impl) { // 将模块中的方法给deps 作为下一个函数的参数 // 由于apply需要一个数组,调用后,并将数组中的方法 // 变为实际的参数 for(var i = 0; i < deps.length; i++) { deps[i] = modules[deps[i]]; } // 实际定义方法 modules[name] = impl.apply(impl, deps); } // 获取方法 function get(name) { return modules[name]; } return { define: define, get: get, }; })(); // example mymodules.define('bar', [], function() { function hello(who) { return "let me introduce: " + who; } return { hello: hello, }; }); // 定义一个foo方法,foo方法会调用模块中之前定义的bar方法 mymodules.define('foo', ['bar'], function (bar) { var hungry = 'hippo'; function awesome() { console.log(bar.hello(hungry).touppercase()); } return { awesome: awesome, }; });