5

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

想象一下 String() 构造函数不存在。创建一个构造函数 MyString(),它的行为尽可能接近 String()。不允许使用任何内置的字符串方法或属性,请记住 String() 不存在。您可以使用此代码来测试您的构造函数:

>>> var s = new MyString('hello');
>>> s.length;

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

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

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

4

1 回答 1

0

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

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

就您的初始化循环而言,不违反要求的荣誉,但它不会起作用。你会得到一个这样的数组:

[
    "0",
    "1",
    "2",
    "3",
    "4"
]

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

小提琴的注意事项:

以下方法未实现:

  • charCodeAt
  • 来自CharCode
  • 代替
  • 搜索
  • 分裂

以下方法仅部分实现:

  • 指数
  • 最后一个索引
  • 匹配
  • 转小写
  • 转大写
于 2012-10-18T12:21:33.027 回答