javascritp自定义一个Mylist顺序存储

class MyList {
    //默认容量
    defaultCapacity = 4
    //定义一个容量为0的数组
     item;
    //数组大小
    _size = 0
    //定义一个为空的数组
    constructor() {
        this.item = new Array(0);
        //通过代理来实现索引器
        return new Proxy(this, {
            get: function (target, prop) {
                if (isNaN(prop)) {
                    return target[prop];
                }
                let index = Number(prop)
                if (index < 0 || index >= target._size) {
                    throw "索引超出范围";
                }
                return target.item[index];
            },
            set: (target, prop, value) => {
               if (prop == "Capacity" || prop=="_size") {
                    target[prop] = value;
                    return true;
                }
                if (target.hasOwnProperty(prop)) return true;
                if (isNaN(prop)) { throw "下标不能为字符串"; }
                if (Number(prop) < 0 || Number(prop) >= target._size) { throw "索引超出范围"; }
                target.item[prop] = value;
                return true
            }
        });

    }
    //获取数组个数
    get Count() {
        return this._size;
    }
    get Capacity() {
        return this.item.length
    }
    set Capacity(val) {
        if (val != this.item.length) {
            if (val > 0) {
                //开辟新的内存空间存储容量
                let dest = new Array(val);
                if (this._size > 0) {
                    //搬动元素
                    dest.splice(0,this._size,...this.item)
                    this.item = dest;
                  
                } else {
                    this.item = new Array(this.defaultCapacity)
                }

            } else {
                this.item = new Array[this.defaultCapacity];
            }
        }
    }
    Add(val) {
        //空间已满
        if (this._size === this.Count) {
            this.EnsureCapacity(Number(this._size) + 1)
        }
        this.item[this._size] = val;
        this._size++
        return this._size;
    }

    //扩容
    EnsureCapacity(v) {
        if (this.item.length < v) {
            //空间加倍
            let num = this.item.length == 0 ? this.defaultCapacity : this.item.length * 2;
            if (num < v) {
                num = v;
            }
            this.Capacity = num;
        }
    }

   Insert(index,value){

   }
   Remove(index){

   }
   TrimToSize(){
       this.Capacity=this._size;
   }

}

var arrlist = new MyList();
arrlist.Add(1)
arrlist.Add(2)
arrlist.Add(3)
arrlist.Add(4)
arrlist.Add(5)
console.log(arrlist[2]);
arrlist[1]=123;
console.log(arrlist[1]);
for(let i=0;i<arrlist.Count;i++){
    console.log(arrlist[i]);
} 
console.log(arrlist.Count);
console.log(arrlist.Capacity);

 

上一篇:九、IOC操作Bean管理(外部属性文件)


下一篇:处理视频序列