JavaScript面向对象编程指南习题答案

js面向对象编程指南习题答案(第四章第六题)

数组相关问题,要求在Array()构造器以及相关的数组文本标识符都不存在的情况下,自定义一个类似的MyArray()构造器,并通过相应测试。
代码如下:

function MyArray(){
    let string = "";
    //记录当前数组中元素的个数
    let len = 0;
    for(let arr in arguments){
        string = string + arguments[arr] + ",";
        len++;
    }
    let str = string.substring(0,string.length-1);

    //a.toString();
    this.toString = function(){
        return str;
    }

    //a.length;
    this.length = len;

    //a[a.length - 1];
    for(let j = 0; j<len; j++){
        this[j] = (function(j){
            if(j == 0){//数组下标为0的元素
                var index_comma = str.indexOf(',');
                var aimStr = str.substring(0,index_comma);
                return aimStr;   
            }else if(j < len - 1){//中间的元素
                    //计数,记录逗号的检索次数
                    let count = 0;
                    //分别表示逗号的相对位置,目标字符串的绝对位置
                    var index_comma, index_begin, index_end;
                    //累加,始终是检索到的逗号后的一个字符的索引(绝对位置)
                    var index_add = 0;
                    index_comma = str.indexOf(',');
                    //从逗号后开始
                    index_add = index_comma + 1;
                    var strSlice = str.substring(index_add, str.length);
                    count++;
                    for(let i=0; i<len; i++){
                        if( count == j){
                            index_begin = index_add;
                       }
                       if( count == j+1){
                            index_end = index_add-1;
                       }

                        index_comma = strSlice.indexOf(',');
                        index_add += (index_comma + 1);
                        var strSlice = str.substring(index_add, str.length); 
                        //为逗号计数
                        count++;
                    }
                    //不包括前一个逗号
                    var aimStr = str.substring(index_begin,index_end);
                    //这是中间的
                    return aimStr;
            }else if(j == len-1){
                var index_comma = str.lastIndexOf(',');
                var aimStr = str.substring(index_comma + 1,str.length);
                //下标length-1
                return aimStr;
            }
        })(j);
        //有好几种可能的情况:1.要分离是第一个元素 2.要分离的是最后一个元素 3.分离的是中间的元素(夹在两个逗号之间)
        //这三个应该是if(){}else if(){}else{}这样的结构
        //值得注意的点有:substring左开右闭
        //采用裁取的方法,绝对索引用前一个的绝对索引加上当前的相对索引得到
    }

    //this.push();
    this.push = function(string){
        str = str + "," + string;
        this[len.length-1] = string;
        len++;
        return len;
    }

    //this.pop()
    this.pop = function(){
        var index_comma = str.lastIndexOf(',');
        var aimStr = str.substring(index_comma+1,str.length);
        str = str.substring(0,index_comma);
        delete this[len - 1];
        len--;
        return '['+aimStr+']';
    }

    //this.join()
    this.join = function(string){
        let strJoin = '';
        strJoin += this[0];
        for(let j = 1; j < len; j++){
            strJoin = strJoin + string + this[j];
        }
        return strJoin;
    }
}

测试结果如下:
JavaScript面向对象编程指南习题答案_第1张图片

你可能感兴趣的:(JavaScript面向对象编程指南习题答案)