仿String()构造器函数 【总结】
需求
实现以下方法:

控制台结果:

需求分析:
首先确定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()构造器函数 【总结】的更多相关文章
- 在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性:
在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性: var s = new MyString("hello"); s ...
- (练习题)利用构造器函数实现三个小实例——不使用String()与Array()构造器和Math对象,不使用内建的方法的方法和属性。
1)在String()构造器不存在的情况下自定义一个myString()构造器函数.由于String()不存在,因此您在写构造器函数时不能使用任何属于内建String对象的方法和属性.并让你所创建的对 ...
- js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法:
js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法: var s = new MyString('hello'); s.length; s[0]; // " ...
- javascript对象初探(一)--- 构造器函数
我们可以通过构造器函数(简称构造函数)来创建对象: function Her(){ this.child = 'Jon'; } 为了使用该函数来创建对象,我们需要使用new操作符,例如: var sh ...
- java String.split()函数的用法分析
java String.split()函数的用法分析 栏目:Java基础 作者:admin 日期:2015-04-06 评论:0 点击: 3,195 次 在java.lang包中有String.spl ...
- string.capwords()函数
string.capwords()函数 string.capwords()函数,有需要的朋友可以参考下. 代码 : import syssys.path.append("C:/Python2 ...
- js--使用构造器函数来新建对象及操作
通过new操作符来调用函数,来达到访问对象this值得目的,构造器将其创建的对象返回给我们. 直接上代码 //创建构造器函数 function Gadget(name, color){ this.na ...
- public static void main(String[] args){}函数诠释
public static void main(String[] args){}函数诠释 主函数的一般写法如下: public static void main(String[] args){-} 下 ...
- Js对象转String的函数 和 JSON转String
js对象转string的函数 function obj2str(o){ var r = []; if(typeof o =="string") return "" ...
随机推荐
- Web 开发之 HTTP/2 & SPDY & HTTP 1.1 & HTTP 对比分析详解!
1 https://zh.wikipedia.org/wiki/HTTP/2 HTTP/2 维基百科,自由的百科全书 HTTP/2(超文本传输协议第2版 ...
- GitHub Ribbons : 谈网站的安全性-资源链接如何 预防/实现 爬虫的批量下载!
GitHub Ribbons : 谈网站的安全性-资源链接如何 预防/实现 爬虫的批量下载! 预防方法: 1. 使用随机数字符串,拼接URL! https://camo.githubuserconte ...
- npm & cli & node.js
npm & cli & node.js https://www.npmjs.com/ https://www.npmjs.com/settings/xgqfrms/packages h ...
- Dart 处理json,built_value库
原文链接 文档 import 'dart:convert'; main() async { // json 转化为 map String jsonStr = ''' [ {"name&quo ...
- NGK公链生态所如何保障用户的数字资产隐私安全?
距离NGK生态所正式上线已经没剩下几天时间了,NGK全网算力总量正在持续猛增,NGK日活账户也在大幅度增多.可以看出,币圈的生态建设者们是十分看好NGK生态所的.那么,有这么多的生态建设者涌入NGK生 ...
- NGK:APP一站式挖矿高收益项目
NGK是10月中旬刚上线的公链项目,采用手机挖矿形式.NGK数字增益平台,200美金即可入场,收益可观,分为静态和动态两种,投资算力收益超高.邀请好友挖矿还有额外的返佣. NGK立志为所有人创造无差别 ...
- Asp.Net Core学习笔记:(二)视图、模型、持久化、文件、错误处理、日志
TagHelper 入门 优点:根据参数自动生成,不需要手写超链接,类似Django模板里面的url命令. 在ViewImport中添加TagHelper @addTagHelper *,Micros ...
- springCloud中的注册中心Nacos
springCloud中的注册中心Nacos 三个模块: 1.注册中心 2.服务提供者(生产者) 提供服务 3.服务消费者(消费者)调用服务 流程:消费者和生产者都要向注册中心注册,注册的是二者中服务 ...
- TERSUS无代码开发(笔记03)-常用快捷键
常用快捷键 1.a 普通行为元件调用 2.b 判断输入的值是什么值 3.c 有条件的传值处理 4.e 输出元件 5.f 传值或流程 6.t 输入元件 7.p 调用元件查询 8.x 判断是否有输入值 图 ...
- 生成pdf phantomjs
注:原创文件,转载请注明出处 使用phantomjs生成还原度比较高的pdf文件,理论上生成word也可以,因需求没有做这块要求,功课留给大家去做了. 下载 https://phantomjs.org ...