JScript 버 전의 Collection Base 클래스

집합 은 우리 가 가장 자주 사용 하 는 데이터 구조 입 니 다. JScript 는 우리 에 게 내부 집합 대상 인 Array 를 제공 하지만 Array 의 인터페이스 호출 규칙 은 우리 가 이미 익숙 한. NET Framework 에 적합 하지 않 습 니 다.JScript 에서 집합 을 편리 하 게 사용 할 수 있 도록 조롱박 을 찾 아 바 가 지 를 그 려 JScript 판 Collection Base 류 를 만 들 었 습 니 다.    복잡 한 것 은 없고 집합 에 필요 한 조작 을 정리 하여 다음 과 같은 방법 을 실현 했다.
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();
};

       이 Collection Base 클래스 가 생 긴 후에 우 리 는 주요 데이터 구조 로 집합 해 야 하 는 Menu, Tree, Grid, ToolBar 등 구성 요 소 를 만 들 때 Collection Base 를 직접 계승 하여 중복 코드 를 많이 줄 일 수 있 습 니 다.

좋은 웹페이지 즐겨찾기