//定义一个装饰者列表 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>");
js修饰者模式,可复用
最新推荐文章于 2024-09-10 19:15:21 发布