js面向对象自定义MyString()的构造器函数,实现内建String()属性和方法:
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()属性和方法:的更多相关文章
- python进阶之函数和类内建魔法属性
前言 关于对象的魔法方法我们已经讲得太多,但是对于类或函数内建的魔法属性和功能我们涉及较少,下面系统了解一下类和函数的内建属性. 查看内建属性 class Person(object): pass d ...
- 在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性:
在String()构造器不存在的情况下自定义一个MyString()函数,实现如下内建String()方法和属性: var s = new MyString("hello"); s ...
- 深入理解javascript函数系列第三篇——属性和方法
× 目录 [1]属性 [2]方法 前面的话 函数是javascript中的特殊的对象,可以拥有属性和方法,就像普通的对象拥有属性和方法一样.甚至可以用Function()构造函数来创建新的函数对象.本 ...
- [.net 面向对象编程基础] (10) 类的成员(字段、属性、方法)
[.net 面向对象编程基础] (10) 类的成员(字段.属性.方法) 前面定义的Person的类,里面的成员包括:字段.属性.方法.事件等,此外,前面说的嵌套类也是类的成员. a.类的成员为分:静态 ...
- python inspect 模块 和 types 模块 判断是否是方法,模块,函数等内置特殊属性
python inspect 模块 和 types 模块 判断是否是方法,模块,函数等内置特殊属性 inspect import inspect def fun(): pass inspect.ism ...
- Js基础知识7-JavaScript所有内置对象属性和方法汇总
对象什么的,程序员可是有很多呢... JS三大对象 对象,是任何一个开发者都无法绕开和逃避的话题,她似乎有些深不可测,但如此伟大和巧妙的存在,一定值得你去摸索.发现.征服. 我们都知道,JavaScr ...
- [js高手之路]原型对象(prototype)与原型链相关属性与方法详解
一,instanceof: instanceof检测左侧的__proto__原型链上,是否存在右侧的prototype原型. 我在之前的两篇文章 [js高手之路]构造函数的基本特性与优缺点 [js高手 ...
- js 内置对象属性及方法
1.Date 属性(1): constructor 所建立对象的函数参考 prototype 能够为对象加入的属性和方法 方法(43): getDay() 返回一周 ...
- js 面向对象中,定义一个函数的过程
定义一个函数做的两件事:1: 实例化一个Function对象:2: 实例化一个Object对象,并给该函数扩展prototype属性指向这个构造函数 大致过程如图所示: 每一种引用类型(函数,对象,数 ...
随机推荐
- SQL CE 和 SQLite数据库对比测试
于项目需要,在客户端需要做数据存储功能,考虑到部署方便同时满足功能需要的情况下选择了SQLCE 和SQLite两种数据库进行客户端数据存储.当然还有很多其他的方式做本地数据存储,比如本地文件存储.微软 ...
- Zypper常用命令
Zypper是OpenSUSE和企业版SUSE中软件包管理器ZYpp的命令行接口. 主要用于:1.管理软件包:zypper可用来安装.删除.更新和查询本地或远程的软件包.2.管理仓库:zypper可用 ...
- Java 基本语法,标识符,修饰符,关键字
基本语法 编写 Java 程序时,应注意以下几点: 大小写敏感:Java 是大小写敏感的,这就意味着标识符 Hello 与 hello 是不同的. 类名:对于所有的类来说,类名的首字母应该大写.如果类 ...
- Assets.car 解压工具 cartool 使用报错 segmentation fault cartool 解决方案
1 cartool 下载地址 https://github.com/steventroughtonsmith/cartool 由于在macOS Mojave系统上 之前代码会报错需要修改main.m ...
- python面试题---收藏的笔记
第一部分 Python基础篇(80题) 为什么学习Python? 通过什么途径学习的Python? Python和Java.PHP.C.C#.C++等其他语言的对比? 简述解释型和编译型编程语言? P ...
- linux线程 join/detach
linux中创建线程时,可以通过 __attr 指定线程的属性 extern int pthread_create (pthread_t *__thread, __const pthread_attr ...
- .net基础学java系列(二)IDE 之 插件
上一篇文章.net基础学java系列(二)IDE "扎实的基础"+"宽广的视野",基本可以帮我们摆脱码畜.码奴.码农的命运! IT领袖:IT大哥:IT精英:IT ...
- Net Core Docker 容器部署,修改,保存
运行镜像 [root@localhost opt]# docker run -itd -p : microsoft/dotnet:latest 查看运行的docker [root@localhost ...
- 课堂小记---JavaScript(2)
本阶段难点疑点梳理 1.关于switch中default的使用: default同case功能一样,区别在于并不匹配任何信息,只有当case中无任何匹配的时候才会执行default.需要注意的是,这是 ...
- .net core 摸索之路
1:先安装vs core 下载地址:http://cdn7.mydown.com/5cc50443/fbaddadae50d260bcac7401e87e9e2c9/newsoft/VSCode_ ...