JScript版CollectionBase类的一个实现
来源:互联网 发布:马蓉人品知乎 编辑:程序博客网 时间:2024/05/16 00:54
集合是我们最常用的数据结构了,JScript虽然给我们提供了一个内部类集合对象Array,可是Array的接口调用规则并不适合我们已经习惯了的.NET Framework。为了在JScript中能方便的使用集合,我找葫芦画瓢作了一个JScript版的的CollectionBase类。
没有什么复杂的东西,只是把集合需要的操作整理了一下,实现了以下方法:
function CollectionBase(){}
CollectionBase.prototype.Clear = function()
CollectionBase.prototype.Clone = function()
CollectionBase.prototype.Item = function(index)
CollectionBase.prototype.Add = function(item)
CollectionBase.prototype.Contains = function(item)
CollectionBase.prototype.IndexOf = function(item)
CollectionBase.prototype.LastIndexOf = function(item)
CollectionBase.prototype.Insert = function(item)
CollectionBase.prototype.InsertAt = function(item, index)
CollectionBase.prototype.Remove = function(item)
CollectionBase.prototype.RemoveAt = function(index)
CollectionBase.prototype.Swap = function(itemA, itemB)
CollectionBase.prototype.Sort = function(sortCallback)
CollectionBase.prototype.Reverse = function()
CollectionBase.prototype.Clear = function()
CollectionBase.prototype.Clone = function()
CollectionBase.prototype.Item = function(index)
CollectionBase.prototype.Add = function(item)
CollectionBase.prototype.Contains = function(item)
CollectionBase.prototype.IndexOf = function(item)
CollectionBase.prototype.LastIndexOf = function(item)
CollectionBase.prototype.Insert = function(item)
CollectionBase.prototype.InsertAt = function(item, index)
CollectionBase.prototype.Remove = function(item)
CollectionBase.prototype.RemoveAt = function(index)
CollectionBase.prototype.Swap = function(itemA, itemB)
CollectionBase.prototype.Sort = function(sortCallback)
CollectionBase.prototype.Reverse = function()
附CollectionBase源代码:
<script language="javascript">
function CollectionBase()
{
this.m_InnerArray = [];
this.m_Count = 0;
this.toString = function()
{
return '[class CollectionBase]';
};
}
CollectionBase.prototype.Clear = function()
{
this.m_InnerArray.splice(0, this.m_Count);
this.m_Count = 0;
};
CollectionBase.prototype.Clone = function()
{
var cb = new CollectionBase();
cb.m_InnerArray = this.m_InnerArray.slice(0);
cb.m_Count = this.m_Count;
return cb;
};
CollectionBase.prototype.Item = function(index)
{
return this.m_InnerArray[index];
};
CollectionBase.prototype.Add = function(item)
{
this.Insert(item);
};
CollectionBase.prototype.Contains = function(item)
{
return (this.IndexOf(itme) != -1);
};
CollectionBase.prototype.IndexOf = function(item)
{
for ( var i=0 ; i < this.m_Count ; ++i )
{
if ( this.m_InnerArray[i] == item )
{
return i;
}
}
return -1;
};
CollectionBase.prototype.LastIndexOf = function(item)
{
for ( var i=this.m_Count-1 ; i >= 0 ; --i )
{
if ( this.m_InnerArray[i] == item )
{
return i;
}
}
};
CollectionBase.prototype.Insert = function(item)
{
this.InsertAt(item, this.m_Count);
};
CollectionBase.prototype.InsertAt = function(item, index)
{
if ( typeof(item) != 'undefined' && typeof(index) != 'undefined' )
{
throw 'you must override this mothed.';
}
/**//* general case code */
/**//*
item.m_Collection = this;
if ( item.m_ChildCollection )
{
if ( this.Contains(item.m_ChildCollection) )
{
item.m_ChildCollection = null;
}
item.m_ChildCollection.m_ParentCollection = item;
}
this.m_Items.splice(index, 0, item);
this.m_Invalidate = true;
*/
};
CollectionBase.prototype.Remove = function(item)
{
for ( var i=0 ; i < this.m_Count ; ++i )
{
if ( this.m_InnerArray[i] == item )
{
this.RemoveAt(i);
break;
}
}
};
CollectionBase.prototype.RemoveAt = function(index)
{
if ( this.m_InnerArray[index] )
{
this.m_InnerArray.splice(index, 1);
this.m_Count--;
}
};
CollectionBase.prototype.Swap = function(itemA, itemB)
{
var iPsnA = this.IndexOf(itemA);
var iPsnB = this.IndexOf(itemB);
if ( iPsnA != -1 && iPsnB != -1 )
{
this.m_InnerArray[iPsnA] = itemB;
this.m_InnerArray[iPsnB] = itmeA;
}
};
CollectionBase.prototype.Sort = function(sortCallback)
{
if ( sortCallback )
{
this.m_InnerArray.sort(sortCallback);
}
else
{
this.m_InnerArray.sort();
}
};
CollectionBase.prototype.Reverse = function()
{
this.m_InnerArray.reverse();
};
</script>
function CollectionBase()
{
this.m_InnerArray = [];
this.m_Count = 0;
this.toString = function()
{
return '[class CollectionBase]';
};
}
CollectionBase.prototype.Clear = function()
{
this.m_InnerArray.splice(0, this.m_Count);
this.m_Count = 0;
};
CollectionBase.prototype.Clone = function()
{
var cb = new CollectionBase();
cb.m_InnerArray = this.m_InnerArray.slice(0);
cb.m_Count = this.m_Count;
return cb;
};
CollectionBase.prototype.Item = function(index)
{
return this.m_InnerArray[index];
};
CollectionBase.prototype.Add = function(item)
{
this.Insert(item);
};
CollectionBase.prototype.Contains = function(item)
{
return (this.IndexOf(itme) != -1);
};
CollectionBase.prototype.IndexOf = function(item)
{
for ( var i=0 ; i < this.m_Count ; ++i )
{
if ( this.m_InnerArray[i] == item )
{
return i;
}
}
return -1;
};
CollectionBase.prototype.LastIndexOf = function(item)
{
for ( var i=this.m_Count-1 ; i >= 0 ; --i )
{
if ( this.m_InnerArray[i] == item )
{
return i;
}
}
};
CollectionBase.prototype.Insert = function(item)
{
this.InsertAt(item, this.m_Count);
};
CollectionBase.prototype.InsertAt = function(item, index)
{
if ( typeof(item) != 'undefined' && typeof(index) != 'undefined' )
{
throw 'you must override this mothed.';
}
/**//* general case code */
/**//*
item.m_Collection = this;
if ( item.m_ChildCollection )
{
if ( this.Contains(item.m_ChildCollection) )
{
item.m_ChildCollection = null;
}
item.m_ChildCollection.m_ParentCollection = item;
}
this.m_Items.splice(index, 0, item);
this.m_Invalidate = true;
*/
};
CollectionBase.prototype.Remove = function(item)
{
for ( var i=0 ; i < this.m_Count ; ++i )
{
if ( this.m_InnerArray[i] == item )
{
this.RemoveAt(i);
break;
}
}
};
CollectionBase.prototype.RemoveAt = function(index)
{
if ( this.m_InnerArray[index] )
{
this.m_InnerArray.splice(index, 1);
this.m_Count--;
}
};
CollectionBase.prototype.Swap = function(itemA, itemB)
{
var iPsnA = this.IndexOf(itemA);
var iPsnB = this.IndexOf(itemB);
if ( iPsnA != -1 && iPsnB != -1 )
{
this.m_InnerArray[iPsnA] = itemB;
this.m_InnerArray[iPsnB] = itmeA;
}
};
CollectionBase.prototype.Sort = function(sortCallback)
{
if ( sortCallback )
{
this.m_InnerArray.sort(sortCallback);
}
else
{
this.m_InnerArray.sort();
}
};
CollectionBase.prototype.Reverse = function()
{
this.m_InnerArray.reverse();
};
</script>
有了这个CollectionBase类以后,我们在制作需要集合为主要数据结构的Menu, Tree, Grid, ToolBar等组件时,就可以直接继承CollectionBase,从而为我们省去很多的重复代码。
- JScript版CollectionBase类的一个实现
- JScript版CollectionBase类的一个实现
- JScript版的的CollectionBase类
- C#中CollectionBase类中IList接口的实现
- C#中CollectionBase类中IList接口的实现
- JScript实现的一个String.Format方法
- CollectionBase 类
- CollectionBase类
- CollectionBase类
- CollectionBase类
- 关于CollectionBase抽象类,IEnumerable,IEnumerator以及IComparer,IComparable的实现
- CollectionBase 的应用
- C# CollectionBase的应用
- CollectionBase的使用方法
- JScript]实现一个日期下拉菜单
- 解决运行JScript的一个诡异错误
- JScript下Singleton模式的实现。
- 数据模板的JScript.net实现
- asp.net(C#)怎样生成验证码?
- 控件的自定义事件
- 固定WEB Table表头表列的一种简易方法
- 如何继承CSplitterWnd类
- QQ尾巴的源代码(Delphi7编写)
- JScript版CollectionBase类的一个实现
- 里应外合,Linux下的后门和日志工具
- 图片
- 太经典了,实在太经典了!
- Java打印
- do all things in php(注入利用程序编写)
- 全面掌握ISO8583报文协议
- CalculatorTest
- adodb.stream对象的方法/属性