首页 > 语言 > JavaScript > 正文

一些手写JavaScript常用的函数汇总

2024-05-06 15:40:35
字体:
来源:转载
供稿:网友

前言

在JavaScript中,几乎每次编写一段代码时,通常都会写入一个函数。我们的大部分代码执行都是函数调用的结果。所以本文主要给大家介绍了一些JavaScript常用的函数,下面话不多说了,来一起看看详细的介绍吧

JavaScript常用的函数

一、bind、call、apply函数的实现改变函数的执行上下文中的this指向,但不执行该函数(位于Function构造函数的原型对象上的方法)

Function.prototype.myBind = function (target) { if (typeof this !== 'function') { throw Error('myBind is not a function') } var that = this var args1 = [...arguments].slice(1) var func = function () { var args2 = [..arguments].slice(1) return that.apply(target || window, args1.concat(args2)) } return func}Function.prototype.myCall = function (context=window) { if (typeof this !== 'function') { throw Error('myBind is not a function')  }  context.fn = this var args = [...arguments].slice(1) var result = context.fn(..args)  delete context.fn return result                                                  }Function.prototype.myApply = function (context=window) { if (typeof this !== 'function') { throw Error('myApply is not a function') } context.fn = this var result if (argument[1]) { result = context.fn(...arguments[1]) } else { result = context.fn() } delete context.fn return result}

二、引用数据类型的深拷贝方法的实现

function cloneDeep (target) { function checkType(target) { return Object.prototype.toString.call(target).slice(8, -1) } var result, checkedType = checkType(target) if (checkedType === 'Array') { result = [] } else if (checkedType === 'Object') { result = {} } else { return target } //递归遍历对象或数组中的属性值或元素为原始值为止 for (var key in target) { if ( checkType(target[key]) === 'Array' || checkType(target[key]) === 'Object') {  result[key] = cloneDeep(target[key]) } else {  result[key] = target[key] } } return result}

思路:

输入需要深拷贝的目标target,输出深拷贝后的结果 通过Object.prototype.toString准确判断传入的目标target的数据类型,当target的数据类型为对象或者数组时,会对target进行递归遍历直至当遍历的数组或者对象中的数据全部为基本数据类型为止

三、数组flat函数的实现

Array.prototype.flat

四、实现n的阶乘

分析:首先找规律,举例如3的阶乘等于3*2*1,也就是等于n*n-1*n-2的阶乘,也就是等于3*2*1的阶乘,计算到1的阶乘之后,整个计算过程才结束。分析到很容易想到通过递归来实现这个数的阶乘,因为第一,这个计算过程有规律可循,第二它有最终停止计算的出口,也就是当计算到1的时候就停止运算,以下通过递归来实现

function factorial (num) { if (num < 0) { throw new Error('负数没有阶乘') } if (num === 1 || num === 0) { return 1 } return num * factorial(num-1)}factorial(3) //6            
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

图片精选