es5.js 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. function Stack(){
  2. Object.defineProperties(
  3. this,
  4. {
  5. add:{
  6. enumerable:true,
  7. writable:false,
  8. value:addToStack
  9. },
  10. next:{
  11. enumerable:true,
  12. writable:false,
  13. value:run
  14. },
  15. clear:{
  16. enumerable:true,
  17. writable:false,
  18. value:clearStack
  19. },
  20. contents:{
  21. enumerable:false,
  22. get:getStack,
  23. set:setStack
  24. },
  25. autoRun:{
  26. enumerable:true,
  27. writable:true,
  28. value:true
  29. },
  30. stop:{
  31. enumerable:true,
  32. writable:true,
  33. value:false
  34. }
  35. }
  36. );
  37. var stack=[];
  38. var running=false;
  39. var stop=false;
  40. function clearStack(){
  41. stack=[];
  42. return stack;
  43. }
  44. function getStack(){
  45. return stack;
  46. }
  47. function setStack(val){
  48. stack=val;
  49. return stack;
  50. }
  51. function addToStack(){
  52. for(var i in arguments){
  53. stack.unshift(arguments[i]);
  54. }
  55. if(!running && !this.stop && this.autoRun){
  56. this.next();
  57. }
  58. }
  59. function run(){
  60. running=true;
  61. if(stack.length<1 || this.stop){
  62. running=false;
  63. return;
  64. }
  65. stack.shift().bind(this)();
  66. }
  67. }