Object.isObject=function (obj) { return Object.prototype.toString.call(obj) === '[object Object]'; } Object.isString=function (obj) { return Object.prototype.toString.call(obj) === '[object String]'; } Object.isArray=function (obj) { return Object.prototype.toString.call(obj) === '[object Array]'; } Object.isRegexp=function (obj) { return Object.prototype.toString.call(obj) === '[object Regexp]'; } Object.isFunction=function (obj) { return Object.prototype.toString.call(obj) === '[object Function]'; } Object.isAsyncFunction=function (obj) { return Object.prototype.toString.call(obj) === '[object AsyncFunction]'; } const moduleAMD={ nameRule:{}, Functions:[], FunctionFuncs:[], defineRule(rule,ruleFunc){ if(Object.isString(rule)){ this.nameRule[rule]=ruleFunc }else{ this.Functions.push(rule); this.FunctionFuncs.push(ruleFunc); } }, matchRule(param1){ if(Object.isString(param1)&&this.nameRule[param1]){ return this.nameRule[param1]; }else{ let index=-1; for(let i=0;i<this.Functions.length;i++){ const func=this.Functions[i]; if(func(param1)){ index=i; break; } } if(index>-1){ return this.FunctionFuncs[index] } } }, require(param1){ //是否匹配到规则 const func=this.matchRule(param1) if(func){ return func.call(this,param1); }else{ return Promise.resolve(param1); } }, //定义数组加载,[name1,name2] initArr(){ this.defineRule(function (param1) { if(Object.isArray(param1)){ return true; } },function (param1) { const arr1=[] for(let i=0;i<param1.length;i++){ arr1.push(this.require(param1[i])) } return Promise.all(arr1) }) }, //定义对象加载 {name1:'name1',name2:'name2'} initObj(){ this.defineRule(function (param1) { if(Object.isObject(param1)){ return true; } },async function (param1) { const nobj={}; const arr1=[] const arr2=[] for(let k in param1){ arr1.push(k); arr2.push(param1[k]); } const arr3=await this.require(arr2) for(let i=0;i<arr1.length;i++){ nobj[arr1[i]]=arr3[i]; } return nobj }) } } //定义数组加载,[name1,name2] moduleAMD.initArr() //定义对象加载 {name1:'name1',name2:'name2'} moduleAMD.initObj() moduleAMD.defineRule('name',async function (name) { return { name:name }; }) async function init(){ const res=await moduleAMD.require({name:'name'}) console.log(res) } init()