mituri

[JS] Wzorzec dekorator

Apr 19th, 2018
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.07 KB | None | 0 0
  1. console.clear();
  2. var cl = function(text){ console.log(text); }
  3.  
  4. function Sale(price){
  5. this.price = price || 100;
  6. }
  7.  
  8. Sale.prototype.getPrice = function(){
  9. return this.price;
  10. }
  11.  
  12. Sale.decorators = {};
  13. Sale.decorators.fedtax = {
  14. getPrice: function(){
  15. var price = this.uber.getPrice();
  16. price += price * 5/100;
  17. return price;
  18. }
  19. }
  20.  
  21. Sale.decorators.quebec = {
  22. getPrice: function(){
  23. var price = this.uber.getPrice();
  24. price += price * 7/100;
  25. return price;
  26. }
  27. }
  28.  
  29. Sale.decorators.money = {
  30. getPrice: function(){
  31. return "USD" + this.uber.getPrice().toFixed(2);
  32. }
  33. }
  34.  
  35. Sale.prototype.decorate = function(decorator){
  36. var F = function(){},
  37. i,
  38. newObj,
  39. overrides = this.constructor.decorators[decorator];
  40.  
  41. F.prototype = this;
  42. newObj = new F();
  43. newObj.uber = F.prototype;
  44. for (i in overrides){
  45. if (overrides.hasOwnProperty(i)){
  46. newObj[i] = overrides[i];
  47. }
  48. }
  49. return newObj;
  50. }
  51.  
  52.  
  53. var sale = new Sale(100);
  54. sale = sale.decorate("fedtax");
  55. sale = sale.decorate("quebec");
  56. sale = sale.decorate("money");
  57. sale.getPrice();
Advertisement
Add Comment
Please, Sign In to add comment