鸟食轩

 Microsoft .NET[C#] MVP 2003
随笔 - 424, 文章 - 233, 评论 - 5420, 引用 - 344
数据加载中……

JScript版CollectionBase类的一个实现

    集合是我们最常用的数据结构了,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源代码:

<script language="javascript">script>


    有了这个CollectionBase类以后,我们在制作需要集合为主要数据结构的Menu, Tree, Grid, ToolBar等组件时,就可以直接继承CollectionBase,从而为我们省去很多的重复代码。

posted on 2005-01-25 22:52 birdshome 阅读(2228) 评论(12)  编辑 收藏 所属分类: Jscript&Dhtml开发

评论

#1楼    回复  引用    

再加一个DemoCode就完美了:)
2005-01-25 23:14 | Ariel [未注册用户]

#2楼    回复  引用  查看    

不错
2005-01-26 00:21 | h3000      

#3楼 [楼主]   回复  引用  查看    

嗯,晚上回去弄个继承CollectionBase的例子。
2005-01-26 11:31 | birdshome      

#4楼    回复  引用    

真的很不错。。希望向大哥学习啊!!
2005-01-26 18:26 | CsOver [未注册用户]

#5楼    回复  引用    

insert与add不是重复了吗?add直接调insert而已
2005-01-27 03:13 | lulu [未注册用户]

#6楼    回复  引用  查看    

嗯,这个是我的习惯,我喜欢用Add,做Insert仅仅是为了和InsertAt配对。
2005-01-27 10:33 | birdshome      

#7楼    回复  引用    

很不错。一直关注你的Blog:)有很大收获。
by the way, 能不能把css换一下,至少是右边的滚动条。每次都点错...
2005-01-27 13:15 | soonquick [未注册用户]

#8楼 [楼主]   回复  引用  查看    

blush,等周末我把主题换成可以被浏览者定制的,再忍耐一下:)
2005-01-27 13:21 | birdshome      

#9楼    回复  引用  查看    

不好意思,我学JAVA的,
对CollectionBase还真的不是很明白!
自己都不知道如何学JS了!!!
郁闷呀!
2005-04-29 10:21 | 不明飞行物      

#10楼    回复  引用    

一段简单程序,是微软关于自定义实体的范例:
//C#
public class UserCollection :CollectionBase {
public User this[int index] {
get {return (User)List[index];}
set {List[index] = value;}
}
public int Add(User value) {
return (List.Add(value));
}
public int IndexOf(User value) {
return (List.IndexOf(value));
}
public void Insert(int index, User value) {
List.Insert(index, value);
}
public void Remove(User value) {
List.Remove(value);
}
public bool Contains(User value) {
return (List.Contains(value));
}
}


但是怎么把它翻译成JScript.net ?
我想来想去,没转成功
2005-11-03 20:29 | rpdg [未注册用户]

#11楼    回复  引用    

恳请赐教
insertAt中下面的代码是作什么用的?
直接splice不就可以了?
item.m_Collection = this;
if ( item.m_ChildCollection )
{
if ( this.Contains(item.m_ChildCollection) )
{
item.m_ChildCollection = null;
}
item.m_ChildCollection.m_ParentCollection = item;
}
万分感谢
2006-02-05 00:38 | qqxx [未注册用户]

#12楼 [楼主]   回复  引用  查看    

@qqxx
you are right, the final version of InsertAt method in CollectionBase is:
CollectionBase.prototype.InsertAt = function(item, index)
{
    if ( item && typeof(index) != 'undefined' )
    {
        this.m_InnerArray.splice(index, 0, item);
        this.m_Count++;
    }
};
2007-05-18 09:56 | birdshome      

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2005-01-26 11:34 编辑过
"五向定位"职业成长路线公开课(上海、南京、大连)
Google站内搜索


相关链接: