js装饰者模式

定义:不改变原类型的条件下,丰富原类型的操作。类型一般是类。
例一:经典的aop

Function.prototype.calculate=function(){
        let date1=new Date();
        this.apply(this);
        let date2=new Date();
        console.log('calculate',date2-date1)
    }
    function test(){
        for(let i=0;i<100000;i++){

        }
        console.log("test")
    }
    test.calculate();

例二:

function add1(val){
        return "$"+val;
    }
    function add2(val){
        return val+".00";
    }
    function decorator(){
        this.dep=[]
    }
    decorator.prototype.addDep=function(fn){
        // console.log(this.dep);
        this.dep.push(fn);
    }
    decorator.prototype.outDerivedIn=function(val){
        let maxNumber=this.dep.length-1;
        let dep=this.dep
        function getDepFn(val,number){
            if(number>maxNumber){
                return val
            }
        
            val=dep[number](val);
            return getDepFn(val,number+1);
        }
        return getDepFn(val,0)
    }
    let inst=new decorator();
    inst.addDep(add1);
    inst.addDep(add2);
    console.log(inst.outDerivedIn(6));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,161评论 1 32
  • 问题不是 把整个世界塞进诗歌,用 阳光、星球、植物把它饲养。也不是 用向着死亡、太阳、怪癖、情人的裸体 打开的精致...
    东丰林波阅读 126评论 0 0
  • 未完成 萌姐60S 多完成 萌姐喜马拉雅直播(11点扛不住睡觉了) 原因:听萌姐直播,直接休息。 工作:仓库库存管...
    王晓杰_2c01阅读 143评论 0 0
  • ubuntu下面配置jdk的环境 download jdk extract tar.gz sudo cp -r /...
    oliverhuang阅读 322评论 0 1