定义加载数据模块的规则-moduleAMD

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()

  

猜你喜欢

转载自www.cnblogs.com/caoke/p/12567075.html