实现js原生方法
编程界小明哥
CSDN博客专家,从事软件开发多年,精通Java、JavaScript,博主也是从零开始一步步把学习成长、深知学习和积累的重要性,欢迎您关注,期待与您一起学习、成长、起飞!
展开
-
原生js源码之bind方法,兼容性封装(IE8)
上次遇到IE8不能使用bind方法就处理了一下兼容,这次分享出来,看有人能有用到不?/** * Function.prototype.bind 方法的兼容性封装 * func 要bind的函数 * thisArg this指向对象 */function bind(func, thisArg) { var nativeBind = Function.prototype.bind;//获取Function原型上的bind var slice = Array.prototype.s原创 2020-12-05 21:10:29 · 479 阅读 · 0 评论 -
原生js源码之Object.values方法
Object.values()方法返回一个给定对象自身的所有可枚举属性值的数组。模仿一个Object.prototype.myValues=function(obj){ if(obj ==null) { throw new TypeError("Cannot convert undefined or null to object"); } var res=[] for(var k in obj){ if(obj.hasOwnProperty(k)){//原创 2020-12-05 16:45:35 · 878 阅读 · 1 评论 -
模仿Ojbect.create来实现原型继承
Object.myCreate=function(o){ if(o==null){ return {} } if(typeof o!=='object' && typeof o!=='function'){ throw new TypeError("Object prototype may only be an Object "+o) } //创建一个函数 function f(){} //将此函数的原型对象设置为传入的对象 f.prototype=o; //返回.原创 2020-12-05 16:25:21 · 177 阅读 · 0 评论 -
原生js源码之Object.keys()方法
Object.keys()方法会返回一个由一个给定对象的自身可枚举属性组成的数组。语法:Object.keys(obj)参数obj: 需要枚举自身属性的对象返回值:由可枚举属性组成的数组下面自己来实现:Object.prototype.myKeys=function(obj){ if(obj ==null) { throw new TypeError("Cannot convert undefined or null to object"); } ..原创 2020-12-04 21:13:44 · 643 阅读 · 0 评论 -
原生js源码之Array数组reverse方法
reverse方法将数组中元素的位置颠倒,并返回该数组。数组的第一个元素会变成最后一个,数组的最后一个元素变成第一个。该方法会改变原数组。语法:arr.reverse()下面自己来实现:Array.prototype.myReverse=function(){ if(this instanceof Array){//数组 var len=this.length,i=len-1; var res=[];//定义一个数组 for(i;i>=0;i--){原创 2020-12-04 20:38:04 · 3202 阅读 · 1 评论 -
原生js源码之Array数组map方法
map方法创建一个新数组,其结果是该数组中的每个元素是执行一次提供的函数后的返回值。语法:var new_array = arr.map(callback(item[, index[, array]]))说明arr:原数组callback:提供的要执行的函数 item:当前元素 index:当前索引 array:原数组new_array:返回的数组下面实现代码:Array.prototype.myMap=function(callbac...原创 2020-12-04 18:33:41 · 1922 阅读 · 0 评论 -
原生js源码之Array的reduce方法
reduce方法对数组中的每个元素执行一个由您提供函数,将其结果汇总为单个返回值。语法:arr.reduce(callback(accumulator, item[, index[, array]])[, initialValue])arr:原数组callback:回调函数accumulator:累加器item:当前元素index:当前索引array:原数组initialValue:初始值(可选),如果没有填写则默认取数组的第一个元素,若此时数组是空数组则会报错。下原创 2020-12-04 17:32:44 · 682 阅读 · 1 评论 -
原生js源码之Array数组filter方法
filter方法创建一个新数组, 包含通过所提供函数实现的测试的所有元素。语法:var newArray = arr.filter(callback(item,index,thisArr))说明:callback:测试函数item:当前元素index:当前索引thisArr:调用了filter的数组本身newArray:返回的新数组,包含所有通过测试的元素。实现代码:var arr = [1,3,5,7,9]Array.prototype.myFilter...原创 2020-12-04 16:23:27 · 1223 阅读 · 0 评论 -
原生js源码之Array数组的every方法
every方法测试一个数组内的所有元素是否都能通过某个指定函数的测试,全部通过测试就返回true,一旦有一个元素不通过测试则立马返回false。下面自己实现一个everyvar arr = [1,3,5,7,9]Array.prototype.myEvery=function(callback){ //如果没有传入回调函数,则报错 if(!callback) throw new TypeError('undefined is not a function'); if (typeof ca.原创 2020-12-04 16:09:06 · 1151 阅读 · 0 评论 -
原生js源码之Array数组some方法
有时候遇到兼容问题,有的方法用不了,今天就some方法自己来实现一个,方便使用。some()方法测试数组中是不是至少有1个元素通过了被提供的函数测试。它返回的是一个Boolean类型的值,如果通过了则返回true,未通过返回false。下面看代码:var arr = [1,2,25,100,60,37]Array.prototype.mySome=function(callback){ //如果没有传入回调函数,则报错 if(!callback) throw new TypeErro.原创 2020-12-04 15:57:02 · 1400 阅读 · 0 评论 -
js没有replaceAll方法,自己来实现replaceAll方法
废话不多说,直接上代码String.prototype.replaceAll = function (){ var args = arguments; var searchValue=args[0]; var newValue = args[1]; //如果搜索的字符与替换的新字符有不存在的,则不做任何操作,返回原字符串 if(!searchValue || !newValue) return this.toString(); var regParam="g"; if(searchVa原创 2020-12-03 15:45:06 · 872 阅读 · 0 评论 -
原生js源码之JavaScript的trim方法
trim方法是去除字符串头尾的空格,本文采用正则来处理。分析: 获取前面的空格:^\s* 获取后面的空格:\s*$ 组合起来:^\s*|\s*$ 因为要用replace所以用分组来捕获,然后替换掉 最终的正则应该是这样 :/(^\s*)|(\s*$)/g写实例测试一下String.prototype.myTrim = function (){ return this.replace(/(^\s*)|(\s*$)/g, "");}var str=...原创 2020-12-03 15:15:01 · 768 阅读 · 0 评论 -
原生js源码之JavaScript的apply方法
apply方法与call方法非常的相似,call的话是可以多个参数的,apply就只能最多2个参数,第一个参数都是绑定对象,第2个则是一个参数列表,语法如下:Function.apply(object,args)方法能接收两个参数object:这个对象将代替Function类里this对象args:这个是数组,它将作为参数传给Function(args-->arguments)写个简单例子使用一下var person={ name:"人类", sayHi:functio...原创 2020-11-30 19:40:19 · 770 阅读 · 0 评论 -
原生js源码之JavaScript的call方法,自己来实现
js的call方法非常强大,说的通俗点,就是可以借窝下蛋,这次就先来看看call方法是什么作用,如何使用,然后在模拟一下call方法。先看一下语法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])参数 thisObj可选项。将被用作当前对象的对象(如果没有传、null、undefined 都会被默认为全局对象)。 arg1, arg2, , argN可选项。将被传递方法参数序列。下面来看一下具体用法var person={ ...原创 2020-11-30 19:02:07 · 1388 阅读 · 1 评论