从头开始定义String()类

Lac*_*iet 5 javascript

我从一本书中得到了这个练习(没有解决方案):

想象一下String()构造函数不存在.创建一个构造函数MyString(),它尽可能地像String()一样工作.您不能使用任何内置字符串方法或属性,并且请记住String()不存在.您可以使用此代码来测试构造函数:

>>> var s = new MyString('hello');
>>> s.length;
Run Code Online (Sandbox Code Playgroud)

然而,我有一个解决方案,但不确定我是否遵循了要求(即:"我不允许使用任何内置的字符串方法或属性"); 这是我的解决方案:

function MyString(string) {
    this.length = 0;
    for(var i in string) { 
        this.length++;      
    }
}
var x = new MyString("Hello");
x.length;
Run Code Online (Sandbox Code Playgroud)

我不确定的是for-in循环.你能告诉我那个循环中字符串变量的数据类型是什么吗?是那种数组还是我用它作为字符串(这是我确实打破了要求)?非常感谢!

pet*_*ete 0

string简短的回答是循环中的数据类型for确实是字符串。但是,您没有使用任何本机 String 方法来计算长度,因此我相当确定您已经满足要求(无论如何对于 length 属性)。

也就是说,我同意 @cwolves 的观点,因为在不违反“不允许使用任何内置字符串方法或属性”。

就您的初始化循环而言,感谢您没有违反要求,但它不起作用。你将得到一个像这样的数组:

[
    "0",
    "1",
    "2",
    "3",
    "4"
]
Run Code Online (Sandbox Code Playgroud)

为了避免超长的帖子,这里有一个部分实现的快速而肮脏的版本的小提琴:http://jsfiddle.net/CtF2Q/

小提琴注意事项:

以下方法未实现:

  • 字符代码At
  • 来自字符代码
  • 代替
  • 搜索
  • 分裂

以下方法仅部分实现:

  • 指数
  • 最后一个索引
  • 匹配
  • 转为小写
  • 改为大写