美文网首页
仿写数组对象

仿写数组对象

作者: 浅夏_cd06 | 来源:发表于2017-12-27 20:51 被阅读0次

    title: 仿写数组对象
    date: 2017-11-13 20:26:25
    tags:


    数组对象 <font style="color: #8D0000;">push | pop | shift | unshift | reverse | splice | join | slice</font>

    prototype给某个类添加属性或方法

        var a=[1,2,3];
        var b=[4,5,6];
    

    <font style="color: #8000D0;">给数组类(所有的数组对象)添加myPush方法</font>

            Array.prototype.myPush=function(){
                // 哪个数组对象调用myPush,this就指向调用myPush的数组对象
                // console.log(this);
                // 调用的时候,写了多少个参数,arguments就有几个元素,arguments是所有参数组成的数组,称为参数列表
                // console.log(arguments);
                // arguments参数列表,获取用户写入的参数列表
                for(var i=0;i<arguments.length;i++){
                    this[this.length]=arguments[i];
                }
            }
            a.myPush(44,55,66);
            console.log(a);
    

    <font style="color: #8000D0;">给数组类(所有的数组对象)添加myPop方法</font>

            Array.prototype.myPop=function(num){
                // 无参数
                // var res=this[this.length-1];
                // this.length=this.length-1;
                // 有参数
                var res=[];
                for(var i=this.length-num;i<this.length;i++){
                    res.myPush(this[i]);
                }
    
                this.length=this.length-num;
                return res;
            }
            // a.myPop(2);
            console.log(a.myPop(2),a);
    

    <font style="color: #8000D0;">给数组类(所有的数组对象)添加myReverse方法</font>

            Array.prototype.myReverse=function(){
                for(var i=0;i<parseInt(this.length/2);i++){
                    // this[i]和this[this.length-1-i]交换即可
                    var temp=this[i];
                    this[i]=this[this.length-1-i];
                    this[this.length-1-i]=temp;
                }
            }
            console.log(a);
            a.myReverse();
            console.log(a);
    

    <font style="color: #8000D0;">给数组类(所有的数组对象)添加myUnshift方法</font>

            Array.prototype.myUnshift=function(){
                this.myReverse();
                for(var i=arguments.length-1;i>=0;i--){
                    this.myPush(arguments[i]);
                }
                this.myReverse();
            }
            console.log(a);
            a.myUnshift(100,200);
            console.log(a);
    

    <font style="color: #8000D0;">给数组类(所有的数组对象)添加myShift方法</font>

            Array.prototype.myShift=function(){
                this.myReverse();
                var res=this.myPop(2);
                this.myReverse();
                return res;
            }
            // a.myShift();
            console.log(a.myShift(),a);
    

    <font style="color: #8000D0;">给数组类(所有的数组对象)添加myJoin方法</font>

            Array.prototype.myJoin=function(str){
                if(str===undefined){
                    str=",";
                }
                var all='';
                for(var i=0;i<this.length-1;i++){
                    all += this[i]+str;
                }
                all+=this[this.length-1];
                return all;
    
                // // 方法二
                // all+=this[0];
                // for(var i=1;i<this.length-1;i++){
                //  all += this[i]+str;
                // }
                // return all;
    
                // // 方法三
                // var all='';
                // for(var i=0;i<this.length-1;i++){
                //  if(i==this.length-1){
                //      str="";
                //  }
                //  all += this[i]+str;
                // }
                // return all;
            }
             console.log(a.myJoin(""));
    
             console.log(Boolean("")===Boolean(undefined));
    

    <font style="color: #8000D0;">给数组类(所有的数组对象)添加mySplice方法</font>

            Array.prototype.mySplice=function(index,length){
                var res=[];
                var newArr=[];
                // 把index-length范围的数做成数组,作为mySplice的返回值
                for(var i=index;i<index+length;i++){
                    res.myPush(this[i]);
                }
                // 拼成新的数组分为三部分
                // 1、范围之前,index之前
                for(var i=0;i<index;i++){
                    newArr.myPush(this[i]);
                }
                // 2、参数列表里面下标2(包括下标2)之后的参数
                for(var i=2;i<arguments.length;i++){
                    newArr.myPush(arguments[i]);
                }
                // 3、范围之后,index+length开始,到最后一个
                for(var i=index+length;i<this.length;i++){
                    newArr.myPush(this[i]);
                }
                // newArr 新数组
                this.length=0;
                for(var i=0;i<newArr.length;i++){
                    this.myPush(newArr[i]);
                }
                return res;
            }
            console.log(a);
            console.log(a.mySplice(2,1,33,44,55,66));
            console.log(a);
    

    <font style="color: #8000D0;">给数组类(所有的数组对象)添加mySlice方法</font>

            Array.prototype.mySlice=function(start,end){
                var res=[];
                for(var i=start;i<end;i++){
                    res.myPush(this[i]);
                }
                return res;
            }
            console.log(a);
            console.log(a.mySlice(2,4));
    

    相关文章

      网友评论

          本文标题:仿写数组对象

          本文链接:https://www.haomeiwen.com/subject/vjrpgxtx.html