js修饰者模式,可复用

//定义一个装饰者列表
function  Sale(price,age){
    this.price=(price>0)?price:100;//初始化价格
    this.age=(age>0)?age:20;
    this.priceDecorateList=[];           //存储将要进行的修饰方法
    this.ageDecorateList=[];
    this.getSth="price,age";    //存储可获取的值
}
//定义一个静态装饰对象来存储可能的装饰方法
Sale.decorators={};
//对于价格的修饰方法
Sale.decorators.getPrice={
    fedtax:function(price){
        return price+200;
    }


}
//对于年龄的修饰方法
Sale.decorators.getAge={

    olderOne:function(age){
        return ++age;
    },
    olderTwo:function(age){
        return age+=2;
    }



}
//定义装饰方法
Sale.prototype.decoratePrice=function(decorateType){
    this.priceDecorateList.push(decorateType);
}
Sale.prototype.decorateAge=function(decorateType){
    this.ageDecorateList.push(decorateType);
}
//获取修饰后的数据:下面是获取价格的例子,也可以是获取别的数据
Sale.prototype.get=function(sth){
        if(this.getSth.search(sth)!==-1){
            var list,listLength;
            switch (sth){
                case "age":

                    list=this.ageDecorateList;
                    listLength=this.ageDecorateList.length;
                    var  nowAge=this.age,getAge=Sale.decorators["getAge"];
                    for(var i=0 ;i<listLength;i++){
                        //遍历所有修饰方法名字
                        nowAge=getAge[list[i]](nowAge);
                    }
                    return nowAge;
                case "price":
                    list=this.priceDecorateList;
                    listLength=this.priceDecorateList.length;
                    var  nowPrice=this.price,getPrice=Sale.decorators["getPrice"];
                    for(var i=0 ;i<listLength;i++){
                        //遍历所有修饰方法名字
                        nowPrice=getPrice[list[i]](nowPrice);
                    }
                    return nowPrice;

            }

        }else{
            alert("不能获取此数值!!");
        }



}
var sale=new Sale(50,12);
sale.decoratePrice("fedtax");
sale.decoratePrice("fedtax");
sale.decorateAge("olderOne");
sale.decorateAge("olderTwo");
document.write(sale.get("price")+"<br>");
document.write(sale.get("age")+"<br>");
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值