需求

实现以下方法:

控制台结果:

需求分析:

首先确定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. ECMAScript 2021 新特性

    ECMAScript 2021 新特性 refs https://codeburst.io/exciting-features-of-javascript-es2021-es12-1de8adf655 ...

  2. shit leetcode edge testcases

    shit leetcode edge testcases Merge Intervals try "use strict"; /** * * @author xgqfrms * @ ...

  3. React Creating Elements All In One

    React Creating Elements All In One https://reactjs.org/docs/react-api.html#creating-react-elements h ...

  4. 转换 React 为TypeScript

    转换 React 为TypeScript JavaScript import React from 'react'; import PropTypes from 'prop-types'; class ...

  5. React & CSS Modules & CSS in JS

    React & CSS Modules & CSS in JS https://codesandbox.io/s/css-modules-name-mangling-ck1eo CSS ...

  6. html fragment & svg remove xml namespace

    html fragment & svg remove xml namespace https://developer.mozilla.org/en-US/docs/Web/API/Docume ...

  7. py django

    创建项目 $ django-admin startproject server 运行项目 $ cd server $ python manage.py runserver 创建一个模块 $ pytho ...

  8. Renice INC:法国葡萄酒为什么独占世界鳌头?

    提起葡萄酒,许多人首先想到的就是法国.法国有着悠久的酿酒历史和精湛工艺,"82年的拉菲"几乎成了大众认识葡萄酒的代名词.市面上的进口葡萄酒琳琅满目,原产国众多,意大利.西班牙.美国 ...

  9. ClickHouse源码笔记3:函数调用的向量化实现

    分享一下笔者研读ClickHouse源码时分析函数调用的实现,重点在于分析Clickhouse查询层实现的接口,以及Clickhouse是如何利用这些接口更好的实现向量化的.本文的源码分析基于Clic ...

  10. Error Code: 1366. Incorrect DECIMAL value: '0' for column '' at row -1 0.266 sec;

    Reference: https://stackoverflow.com/questions/35037288/incorrect-decimal-integer-value-mysql     Er ...