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

var s = new MyString('hello');
s.length; //
s[0]; // "h"
s.toString(); // "hello"
s.valueOf(); // "hello"
s.charAt(1); // "e"
s.charAt('2'); // "l"
s.charAt('e'); // "h"
s.concat(' world!'); // "hello world!"
s.slice(1, 3); // "el"
s.slice(0, -1); // "hell"
s.split('e'); // ["h", "llo"]
s.split('l'); // ["h", "", "o"]
s.split(); // ["hello"]
s.reverse(); // "olleh"
function MyString(str) {
var str = str.toString();
var arr = [];
for (var i in str) {
this[i] = arr[i] = str[i];
}
this.length = arr.length;
this['[[PrimitiveValue]]'] = str;
}
MyString.prototype.toString = function () {
return this['[[PrimitiveValue]]']+'';
}
MyString.prototype.valueOf = function () {
return this['[[PrimitiveValue]]'];
}
MyString.prototype.charAt = function (pos) {
var pos = pos*1 || 0;
return this[pos] || '';
}
MyString.prototype.concat = function (strings) {
return this.toString()+strings;
}
MyString.prototype.slice = function (start,end) {
var start = start>=0?start : this.length+start || 0; //-1
var end = end >=0?end : this.length+end || 0; //-1
start = start <= this.length ? start:this.length;
end = end <= this.length ? end:this.length;
var str = '';
for (var i = start; i<end; i++) {
str+=this[i];
}
return str;
}
MyString.prototype.split = function (separator) {
var arr = [];
var index=0;
for (var i=0; i<this.length; i++){
if(this[i]==separator) {
arr[arr.length] = this.slice(index,i);
index = i+1;
}
}
arr[arr.length] = this.slice(index,i);
return arr;
}
// for循环版
MyString.prototype.reverse = function () {
var str = '';
for (var i = this.length-1; i>-1; i--) {
str += this[i];
}
return str;
}
//借助数组的reverse()方法
MyString.prototype.reverse = function () {
var arr = [];
for (var i = 0; i<this.length; i++) {
arr[arr.length] = this[i];
}
return arr.reverse().join('');
}

亲,记得点赞哦!

js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法:的更多相关文章

  1. python进阶之函数和类内建魔法属性

    前言 关于对象的魔法方法我们已经讲得太多,但是对于类或函数内建的魔法属性和功能我们涉及较少,下面系统了解一下类和函数的内建属性. 查看内建属性 class Person(object): pass d ...

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

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

  3. 深入理解javascript函数系列第三篇——属性和方法

    × 目录 [1]属性 [2]方法 前面的话 函数是javascript中的特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本 ...

  4. [.net 面向对象编程基础] (10) 类的成员(字段、属性、方法)

    [.net 面向对象编程基础] (10) 类的成员(字段.属性.方法) 前面定义的Person的类,里面的成员包括:字段.属性.方法.事件等,此外,前面说的嵌套类也是类的成员. a.类的成员为分:静态 ...

  5. python inspect 模块 和 types 模块 判断是否是方法,模块,函数等内置特殊属性

    python inspect 模块 和 types 模块 判断是否是方法,模块,函数等内置特殊属性 inspect import inspect def fun(): pass inspect.ism ...

  6. Js基础知识7-JavaScript所有内置对象属性和方法汇总

    对象什么的,程序员可是有很多呢... JS三大对象 对象,是任何一个开发者都无法绕开和逃避的话题,她似乎有些深不可测,但如此伟大和巧妙的存在,一定值得你去摸索.发现.征服. 我们都知道,JavaScr ...

  7. [js高手之路]原型对象(prototype)与原型链相关属性与方法详解

    一,instanceof: instanceof检测左侧的__proto__原型链上,是否存在右侧的prototype原型. 我在之前的两篇文章 [js高手之路]构造函数的基本特性与优缺点 [js高手 ...

  8. js 内置对象属性及方法

    1.Date 属性(1): constructor      所建立对象的函数参考 prototype       能够为对象加入的属性和方法 方法(43): getDay()        返回一周 ...

  9. js 面向对象中,定义一个函数的过程

    定义一个函数做的两件事:1: 实例化一个Function对象:2: 实例化一个Object对象,并给该函数扩展prototype属性指向这个构造函数 大致过程如图所示: 每一种引用类型(函数,对象,数 ...

随机推荐

  1. 【easy】189. Rotate Array

    题目标签:Array 题目给了我们一个数组 和 k. 让我们 旋转数组 k 次. 方法一: 这里有一个很巧妙的方法: 利用数组的length - k 把数组 分为两半: reverse 左边和右边的数 ...

  2. ffmypeg 视频处理类库使用方法

    (经常用到ffmpeg 做一些视频数据的处理转换等,用来做测试,今天总结了一下,参考了网上部分朋友的经验,一起在这里汇总了一下,有需要的朋友可以收藏测试一下,有问题欢迎在下面回帖交流,谢谢;by te ...

  3. Python base64编码,转图片

    我在做火车票抢票器的时候遇到一个问题,就是验证码提取的:一般验证码都是一些http请求的url,但是火车票网站遇到了我没有见过的以data:image/jpg;base64开头的字符串.现在我们就用P ...

  4. python实现常见排序算法

    #coding=utf-8from collections import deque #冒泡排序def bubblesort(l):#复杂度平均O(n*2) 最优O(n) 最坏O(n*2) for i ...

  5. 出错:Failed to convert property value of type 'org.apache.ibatis.session.defaults.DefaultSqlSessionFactory' to required type 'java.lang.String' for property 'sqlSessionFactoryBeanName';

    出错的详细信息: 3 ERROR [http-nio-80-exec-3] org.springframework.web.servlet.DispatcherServlet - Context in ...

  6. http强转https websocket

    需要在httpd.conf文件最后添加即可: <Directory /> Options FollowSymLinks AllowOverride All RewriteEngine on ...

  7. C#学习-显式接口

    显式的接口实现解决了命名冲突问题. 在使用显式的接口实现方式时,需要注意以下几个问题. 若显式实现接口,方法不能使用任何访问修饰符,显式实现的成员都默认为私有: 现式实现的成员默认是私有的,所以这些成 ...

  8. 微信域名检测的C#实现

     背景:最近公司的公众号域名被封了,原因是公司网站被黑后上传了一个不符合微信规范的网页.所以...就进入了微信域名解封的流程. 百度微信域名解封发现很多微信域名检测的网站,还有Api:但是本人做微信公 ...

  9. python生成pdf报告、python实现html转换为pdf报告

    1.先说下html转换为pdf:其实支持直接生成,有三个函数pdfkit.f 安装python包:pip Install pdfkit 系统安装wkhtmltopdf:参考 https://githu ...

  10. 安装docker以及问题解决办法

    1.使用官方推荐的方式安装 yum-utilsyum install -y yum-utils2.使用如下的命令设置稳定版的 repositoryyum-config-manager \    --a ...