仿写数组对象


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));
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,282评论 0 4
  • title: 仿写字符串对象date: 2017-11-14 22:02:18tags: 字符串类型 <font ...
    浅夏_cd06阅读 146评论 0 0
  • 多线程-thread Thread类和Runnable接口都在java.lang包中。 内容: 1.多线程的基本概...
    可乐W阅读 464评论 0 0
  • 原型和原型链 示例如何准确判断一个变量是数组类型写一个原型链继承的例子描述 new 一个对象的过程zepto(或其...
    xunuo0x阅读 261评论 0 0
  • 一整天都在忙碌着。 早上起晚了,安顿好小孩后猛然记起昨晚念及几遍今早要买上佳肥猪肉。急急忙忙,拖着俩孩子的手,去肉...
    添一抹岚阅读 563评论 0 5