| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374 | 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)();    }}
 |