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