Javascript 从头定义String()类

Javascript 从头定义String()类,javascript,Javascript,我从一本书中得到了这个练习(没有答案): 假设String()构造函数不存在。创建构造函数 MyString()尽可能像String()一样工作。你不是 允许使用任何内置的字符串方法或属性,请记住 String()不存在。您可以使用以下代码测试构造函数: >>> var s = new MyString('hello'); >>> s.length; 然而,我有一个解决方案,但不确定我是否遵循了要求(即:“我不允许使用任何内置字符串方法或属性”); 以下是我

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

假设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循环。您能告诉我该循环中字符串变量的数据类型是什么吗?这是一种数组,还是我将其用作字符串(也就是说,我确实违反了要求)?
非常感谢

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

这就是说,我同意@cWalves的观点,因为在不违反“不允许使用任何内置字符串方法或属性”的要求的情况下,将不同的数据类型传递给构造函数(考虑到JavaScript的数据类型太少)是极其困难的

就初始化循环而言,没有违反要求是值得称赞的,但它不会工作。您将得到如下数组:

[
    "0",
    "1",
    "2",
    "3",
    "4"
]
为了避免出现超长的帖子,这里有一个快速而肮脏的部分实现版本:

注意事项:

未实施以下方法:

  • charCodeAt
  • fromCharCode
  • 替换
  • 搜寻
  • 分裂
以下方法仅部分实施:

  • 索引
  • lastIndexOf
  • 匹配
  • 托洛夫斯基
  • 图珀案

如果不首先使用任何字符串,就无法将字符串输入到类中,因此我认为这个问题毫无意义(从技术上讲,您可以将其作为dec数字传递,但这太愚蠢了)。基本上,我认为关键是初始化类,然后再也不要使用
String.prototype
函数(例如,像
this.letters=String.split(“”)那样初始化它)
。然后需要
indexOf
toLowerCase
toUpperCase
,等等该代码的数据类型将是string。即:
typeof string==“string”
(基本字符串)和
string实例of string
(继承
string
对象)。是的,就是这样。但是您将无法传递其他字符串格式,这些格式不是字符串原语或字符串对象(例如:
newstring(“hello”)
)。