我正在通过面向对象的Javascript前进,我不禁感到自己错过了某项练习的内容。因此,我在这里寻找的是如何改善代码或对构造函数的理解的指针。这是the challenge


  想象一下String()构造函数
  不存在。创建一个构造函数
  函数MyString()的行为类似于
  String()尽可能接近。
  您不得使用任何内置
  字符串方法或属性,以及
  记住String()不存在。
  您可以使用此代码来测试您的
  构造函数:
  
  -
  
  var s = new MyString('hello');
  
  s.length(); s [0]; s.toString();
  s.valueOf(); s.charAt(1);
  s.charAt('2'); s.charAt('e');
  s.concat('world!'); s.slice(1,3);
  s.slice(0,-1); s.split('e);
  s.split('l'); s.reverse();


这是我的回复,但在一个或两个帐户上失败了,但是我对它的实际结构更感兴趣。我完全不在基地了吗?是否可以查看浏览器实现的实际String构造函数进行比较?

function MyString(string){

    a = string.split("");

    this.length = a.length;

    this.toString = function(){
        return a.join("");
    };

    this.valueOf = function(){
        if(a.length > 0 && string !== 0 && string !== false && string !== undefined){
            return true;
        } else {
            return false;
        }
    };

    this.charAt = function(index){
        return a[index];
    };

    this.concat = function(addition){
        return string + addition;
    };

    this.slice = function(begin, end){
        var a2 = new Array();

        if(end < 0){
            end = parseInt(a.length) + end;
        }
        for(y = begin;y<end;y++){
            a2 += a[y];
        }

        return a2;
    };

    this.split = function(splitter){
        spPos = parseInt(a.indexOf(splitter));
        var split1 = a.slice(0,spPos);
        var split2 = a.slice(spPos + 1, a.length);
        var joined = new Array();
        return joined.concat(split1.join(""), split2.join(""));
    };

    this.reverse = function(){
        var ar = a.reverse();
        return ar.join("");
    };

    return this;
}


我要上床睡觉,但是我会起床并在早上做出回应。非常感谢您提供有关此问题的任何指导。

最佳答案

如前所述,有关类结构的快速说明。

您的类的编写方式应使所有方法都在构造函数内部。因此,当您初始化新类时,将重新生成所有方法。因此,如果页面上有多个MyString类的实例,那么这将不是最有效的技术。您应该考虑改用原型技术。因此,您的构造函数将变成:

function MyString(string){
    a = string.split("");
    this.length = a.length;
}


然后,您的方法在构造函数外部声明,因此每次创建MyString的新实例时都不会重新生成。

MyString.prototype.toString = function(){ return a.join(""); }

MyString.prototype.charAt = function(index){ return a[index]; }

关于javascript - 重写JS String构造函数:我要离开吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3888273/

10-10 13:42
查看更多