需求

实现以下方法:

控制台结果:

需求分析:

首先确定new调用的this和什么对象绑定,如果跟默认返回的对象绑定肯定做不到 [ ] 这样的访问,所以要在构造器内部返回一个包装过的数组

1.length,既然前提是没有String()构造器函数,那就不能用字符串对象的length方法,所以首先要将接收的字符串包装成数组。虽说不能用字符串对象的方法,但这里还是用到了         ES5的 [ ] 中括号访问法,为了将字符串中的每一个字符做成数组中的每一项,这样length就可以直接使用数组本身有的。

2. [ ]  中括号访问法,直接用数组的

3.toString() 方法内部实现就是调用数组的join();方法

4.valueOf() 方法同上

5.charAt() 方法,规定如果参数是数字或是字符串,只要它是由纯数字组成的就应该返回正确的结果,如果包含非数字的字符就返回第一个字符。实现方式就是简单判断传入的参         数,然后像使用数组一样使用上面包装过的字符串数组来返回正确的值。

6.concat() 方法,在内部调用toValue()方法,加上传进来的参数,然后返回出去。

7.slice() 方法,要求返回第一个参数的字符和第二个参数-1的之间的字符;如果是负数就与将参数与字符串长度相加。

8.split() 方法,将传入的参数作为分隔符,将字符串分割成数组。

实现思路:

第一步要确认this与什么对象绑定,也就是构造器函数返回什么对象,这一点很重要,不知道是不是属于OOP的风格。

难点:

split怎么做,如果只是匹配单个字符还容易,多字符匹配做起来显得有点吃力。

难点解决方案:

第一步:检测字符数组的每一项,如果与期望字符串的第一个匹配就进入第二步

第二步:用循环匹配后面的字符,如果有一个不相等就break出来

第三步:匹配判断结束后( 不管是break过还是没break过都要判断 ),如果匹配结束后的循环索引等于期望字符串的长度,说明中途没有被中断过

第四步:记录下这个没有被中断过的位置,然后将它对应的起始位置,也就是 i 保存到一个数组里,再将这个数组保存到更大的数组里。

涉及的新知识:

OOP

优化方向:

不知道可不可以用正则去优化。

备注:

OOP风格的js可能需要先想好this与什么对象绑定,这个对象就像是身体,要先确定是什么样的身体才能根据它衍生出不同的功能。

仿String()构造器函数 【总结】的更多相关文章

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

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

  2. (练习题)利用构造器函数实现三个小实例——不使用String()与Array()构造器和Math对象,不使用内建的方法的方法和属性。

    1)在String()构造器不存在的情况下自定义一个myString()构造器函数.由于String()不存在,因此您在写构造器函数时不能使用任何属于内建String对象的方法和属性.并让你所创建的对 ...

  3. js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法:

    js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法: var s = new MyString('hello'); s.length; s[0]; // " ...

  4. javascript对象初探(一)--- 构造器函数

    我们可以通过构造器函数(简称构造函数)来创建对象: function Her(){ this.child = 'Jon'; } 为了使用该函数来创建对象,我们需要使用new操作符,例如: var sh ...

  5. java String.split()函数的用法分析

    java String.split()函数的用法分析 栏目:Java基础 作者:admin 日期:2015-04-06 评论:0 点击: 3,195 次 在java.lang包中有String.spl ...

  6. string.capwords()函数

    string.capwords()函数 string.capwords()函数,有需要的朋友可以参考下. 代码 : import syssys.path.append("C:/Python2 ...

  7. js--使用构造器函数来新建对象及操作

    通过new操作符来调用函数,来达到访问对象this值得目的,构造器将其创建的对象返回给我们. 直接上代码 //创建构造器函数 function Gadget(name, color){ this.na ...

  8. public static void main(String[] args){}函数诠释

    public static void main(String[] args){}函数诠释 主函数的一般写法如下: public static void main(String[] args){-} 下 ...

  9. Js对象转String的函数 和 JSON转String

    js对象转string的函数 function obj2str(o){ var r = []; if(typeof o =="string") return "" ...

随机推荐

  1. HDU 3681 Prison Break(状压DP + BFS)题解

    题意:一张图,F是起点,Y是必须要到的点,D不能走,G可以充电.可以往四个方向走,每走一步花费一个电,走到G可以选择充满电或者不充,每个G只能充一次.问你走遍Y的最小初始点亮.number(G) + ...

  2. LOJ6285 数列分块入门9(分块 区间众数)题解

    题意:给出区间内的最小众数 思路:分块,离散化每个数,开vector记录每个数p出现的位置,这样就能二分出L,R以内p的个数了.众数有一个性质,用mode(a)表示集合a的众数,那么mode(a∪b) ...

  3. 大数据开发-linux后台运行,关闭,查看后台任务

    在日常开发过程中,除了例行调度的任务和直接在开发环境下比如Scripts,开发,很多情况下是shell下直接搞起(小公司一般是这样),看一下常见的linux后台运行和关闭的命令,这里做一个总结,主要包 ...

  4. python类属性和对象属性、类的普通方法和静态方法

    类属性和对象属性的定义 class LearnClass(): #类属性 cls_attr = None def __init__(self,arg): #对象属性 self.obj_attr = a ...

  5. uni-app 支持第三方 H5 离线包

    uni-app 支持第三方 H5 离线包 https://uniapp.dcloud.io/ https://github.com/dcloudio/uni-app refs xgqfrms 2012 ...

  6. React render algorithm & Fiber vs Stack

    React render algorithm & Fiber vs Stack React 渲染算法 & Fiber vs Stack https://stackoverflow.co ...

  7. MobX All In One

    MobX All In One Simple, scalable state management. https://mobx.js.org/README.html https://github.co ...

  8. Chrome 黑科技

    Chrome 黑科技 秒变记事本 data:text/html, <htmlcontenteditable> OK <a href="data:text/html, &qu ...

  9. ES2021 & Pipeline operator (|>) / 管道运算符 |>

    ES2021 & Pipeline operator (|>) / 管道运算符 |> demo "use strict"; /** * * @author xg ...

  10. brew & apply2files bug

    brew & apply2files bug Error: Permission denied @ apply2files - /usr/local/lib/node_modules/npm/ ...