I'm making tetris version 2, and it have a link list in it. Figure it a good idea to share :D.
Using the list list,
The following use inheritance in JavaScript and make a sub class Candy.
Candy = function(flavor){ this.super = LinkListItem; this.super(); this.flavor = flavor; this.toString = function(){ return this.flavor + ' Candy' ; } } box = new LinkList(); box.append(new Candy('Apple')); box.append(new Candy('Banana')); box.append(new Candy('Orange')); alert('I have '+box+' in my box');
Source Code
/** * A simple like list */ LinkList = function(){ startItem = null; endItem = null; /** * Add an item to the end of the list */ this.append = function (item){ item.backward = this.endItem; item.forward = null; item.parent = this; if(this.endItem){ this.endItem.forward = item } if(!this.startItem){ this.startItem = item; } this.endItem = item; } /** * Add the item to the front of the list */ this.prepend = function (item){ item.forward = this.startItem; item.backward = null; item.parent = this; if(this.startItem){ this.startItem.backward = item } this.startItem = item; } /** * Remove the item from the list */ this.remove = function(item){ if(item.backward){ item.backward.forward = item.forward; } if(item.forward){ item.forward.backward = item.backward; } if(this.startItem == item){ this.startItem = item.forward; } if(this.endItem == item){ this.endItem = item.backward; } item.parent = null; } this.toString = function(){ var item = this.startItem; var items = new Array(); while(item != null){ items.push(item); item = item.forward; } if(!items.length){ return "Empty"; } return items.join(', '); } } /** * A link list item */ LinkListItem = function(){ this.parent = null; this.forward = null; this.backward = null; this.remove = function(){ if(this.parent){ this.parent.remove(this); } } this.moveToFront = function(){ if(this.parent){ var parent = this.parent; parent.remove(this); parent.prepend(this); } } this.moveToBack = function(){ if(this.parent){ var parent = this.parent; parent.remove(this); parent.append(this); } } } /** * Testing Script * Candy = function(flavor){ this.inherit = LinkListItem; this.inherit(); this.flavor = flavor; this.toString = function(){ return this.flavor + ' Candy' ; } } var box = new LinkList(); box.append(new Candy('Apple')); box.append(new Candy('Banana')); box.append(new Candy('Orange')); alert("What Do I have in my box? " + box); /***/
No comments:
Post a Comment