Ray-Yan 2016-02-15 10:32 采纳率: 100%
浏览 1765
已采纳

JS新建构造器实现内建String()的方法和属性

在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性:

 var s = new MyString(“hello”);
s.length;  //5
s[0];  //"h"
s.toString();  //"hello"
s.charAt(1);  //"e"
s.charAt("e");  //"h"  (这个是怎么来的???)
s.slice(0,-1);  //"hell"
s.split("e");  //["h","llo"]
s.reverse();  //"olleh"

 题目提示用把字符串当做数组用for循环遍历,(但是用for循环不就会用到“.length”属性了吗?)请教大家,谢谢!

  • 写回答

6条回答

  • lambda-fk 2016-02-15 16:06
    关注

    这个和之前的MyArray是相同的思想,都是数据结构封装。
    之前我给你说[]不好实现,原来是我理解偏差,非要设计成函数构造器调用模式就陷入进去了。
    刚才我想想,其实这个[]不是自己实现的,利用数组才能完成。
    所以数组是核心,既然js中一切是对象,那么数组也是,可以像函数一样添加别的属性和方法。
    题目提示用把字符串当做数组用for循环遍历,(但是用for循环不就会用到“.length”属性了吗?)
    在js以及python等语言中有一个 辅助的for循环 是 for-in循环
    可以用来便利一个可迭代的对象,比如字符串,数组,列表,元组等数据对象
    所以便利一个字符串可以使用for-in
    图片说明
    既然这样你可以用它把一个字符串转化成一个字符数组

    var MyString = function(str){
    ... var list = [];
    ... for(var c in str){
    ..... list.push(c);
    ..... }
    ...
    ... list.toString = function(){
    ... var str = "";
    ... for(var p in list){
    ..... str = str+p;
    ..... }
    ... return str;
    ... }
    ...
    ... list.charAt = function(index){
    ... return list[index];
    ... }
    return list;
    ... }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(5条)

报告相同问题?

悬赏问题

  • ¥15 如何实验stm32主通道和互补通道独立输出
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题
  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题