Javascript 从头定义String()类
我从一本书中得到了这个练习(没有答案): 假设String()构造函数不存在。创建构造函数 MyString()尽可能像String()一样工作。你不是 允许使用任何内置的字符串方法或属性,请记住 String()不存在。您可以使用以下代码测试构造函数:Javascript 从头定义String()类,javascript,Javascript,我从一本书中得到了这个练习(没有答案): 假设String()构造函数不存在。创建构造函数 MyString()尽可能像String()一样工作。你不是 允许使用任何内置的字符串方法或属性,请记住 String()不存在。您可以使用以下代码测试构造函数: >>> var s = new MyString('hello'); >>> s.length; 然而,我有一个解决方案,但不确定我是否遵循了要求(即:“我不允许使用任何内置字符串方法或属性”); 以下是我
>>> 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
- 匹配
- 托洛夫斯基
- 图珀案
String.prototype
函数(例如,像this.letters=String.split(“”)那样初始化它)
。然后需要indexOf
,toLowerCase
,toUpperCase
,等等该代码的数据类型将是string。即:typeof string==“string”
(基本字符串)和string实例of string
(继承string
对象)。是的,就是这样。但是您将无法传递其他字符串格式,这些格式不是字符串原语或字符串对象(例如:newstring(“hello”)
)。