75 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| function Stack(){
 | |
|     Object.defineProperties(
 | |
|         this,
 | |
|         {
 | |
|             add:{
 | |
|                 enumerable:true,
 | |
|                 writable:false,
 | |
|                 value:addToStack
 | |
|             },
 | |
|             next:{
 | |
|                 enumerable:true,
 | |
|                 writable:false,
 | |
|                 value:run
 | |
|             },
 | |
|             clear:{
 | |
|                 enumerable:true,
 | |
|                 writable:false,
 | |
|                 value:clearStack
 | |
|             },
 | |
|             contents:{
 | |
|                 enumerable:false,
 | |
|                 get:getStack,
 | |
|                 set:setStack
 | |
|             },
 | |
|             autoRun:{
 | |
|                 enumerable:true,
 | |
|                 writable:true,
 | |
|                 value:true
 | |
|             },
 | |
|             stop:{
 | |
|                 enumerable:true,
 | |
|                 writable:true,
 | |
|                 value:false
 | |
|             }
 | |
|         }
 | |
|     );
 | |
| 
 | |
|     var stack=[];
 | |
|     var running=false;
 | |
|     var stop=false;
 | |
| 
 | |
|     function clearStack(){
 | |
|         stack=[];
 | |
|         return stack;
 | |
|     }
 | |
| 
 | |
|     function getStack(){
 | |
|         return stack;
 | |
|     }
 | |
| 
 | |
|     function setStack(val){
 | |
|         stack=val;
 | |
|         return stack;
 | |
|     }
 | |
| 
 | |
|     function addToStack(){
 | |
|         for(var i in arguments){
 | |
|             stack.unshift(arguments[i]);
 | |
|         }
 | |
|         if(!running && !this.stop && this.autoRun){
 | |
|             this.next();
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     function run(){
 | |
|         running=true;
 | |
|         if(stack.length<1 || this.stop){
 | |
|             running=false;
 | |
|             return;
 | |
|         }
 | |
| 
 | |
|         stack.shift().bind(this)();
 | |
|     }
 | |
| }
 |