zoukankan      html  css  js  c++  java
  • 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">
    function CollectionBase()
    {
        
    this.m_InnerArray = [];
        
    this.m_Count = 0;

        
    this.toString = function()
        
    {
             
    return '[class CollectionBase]';
        }
    ;
    }


    CollectionBase.prototype.Clear 
    = function()
    {
        
    this.m_InnerArray.splice(0this.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,从而为我们省去很多的重复代码。

  • 相关阅读:
    mongodb
    python中读取文件的read、readline、readlines方法区别
    uva 129 Krypton Factor
    hdu 4734
    hdu 5182 PM2.5
    hdu 5179 beautiful number
    hdu 5178 pairs
    hdu 5176 The Experience of Love
    hdu 5175 Misaki's Kiss again
    hdu 5174 Ferries Wheel
  • 原文地址:https://www.cnblogs.com/pricks/p/1667163.html
Copyright © 2011-2022 走看看