从头开始定义String()类

时间:2012-10-16 02:50:19

标签: javascript

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

  

想象一下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循环。你能告诉我那个循环中 string 变量的数据类型是什么?是那种数组还是我用它作为字符串(这是我确实打破了要求)? 非常感谢!

1 个答案:

答案 0 :(得分:0)

简短的回答是string循环中for的数据类型确实是String。但是,您没有使用任何本地String方法来计算长度,因此我非常确定您已满足要求(无论如何都是长度属性)。

那就是说,我同意@cwolves的意思是,将一个不同的数据类型传递给你的构造函数是非常困难的(假设JavaScript只有这么少)而不违反"你和#39;不允许使用任何内置的字符串方法或属性"。

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

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

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

小提琴的注意事项:

未实施以下方法:

  • charCodeAt
  • fromCharCode
  • 替换
  • 搜索
  • 分割

以下方法仅部分实施:

  • 的indexOf
  • lastIndexOf
  • 匹配
  • toLowerCase
  • toUpperCase