重读设计模式的一些方法备忘

junwu / 2023-05-08 / 原文

//判断数据类型
        Type = {};
        for(var i=0,type;type=['String','Array','Number'][i++];){
            (function(type){
                Type['is'+type] = function(obj){
                   return Object.prototype.toString.call(obj) === '[object '+type+']';
                }
            })(type)
        }
        console.log('type',Type.isArray([]));

        //动态植入方法
        Function.prototype.before = function(beforefn){
            var _self = this;
            return function(){
                beforefn.apply(this,arguments);
                return _self.apply(this.arguments);
            }
        }

        Function.prototype.after = function(afterfn){
            var _self = this;
            return function(){
                 var ret = _self.apply(this.arguments);
                 afterfn.apply(this,arguments);
                 return ret;
            }
        }
        var func = function(){
            console.log(2)
        }
        func = func.before(function(){
            console.log(1);
        }).after(function(){
            console.log(3)
        })
        func();
        
        //currying函数柯里化
        var coast = (function(){
            var args = [];
            return function(){
                if(arguments.length === 0){
                    var a = 0;
                    for(var i=0;i<args.length;i++){
                        a+=args[i]
                    }
                    return a;
                }else{
                    [].push.apply(args,arguments);
                }
            }
        })()
        coast(100);
        coast(200);
        console.log('***',coast());