- 博客(8)
- 收藏
- 关注
原创 数组API
filter Array.prototype.myFilter = function (callback, thisArg) { const res = [] const obj = new Object(this) const len = obj.length >>> 0 // 无符号右移0位,保证为0或正整数 for (let i = 0; i < len; i++) { if (i in obj) { if (callback.call(t
2020-10-08 13:01:23 132 1
原创 call、apply和bind
call Function.prototype.myCall = function (context, ...args) { if (typeof this !== 'function') { throw new TypeError('Not a function') } const fn = Symbol('fn') // Symbol防止重复 context[fn] = this // this是调用call的函数 const res = context[fn](...arg
2020-10-07 22:48:54 98
原创 Promise封装原生ajax
原生ajax是XMLHttpRequest,监听readyStateChange事件,关注readyState和status。 const ajax = url => { return new Promise((resolve, reject) => { const xhr = new XMLHttpRequest() xhr.open('GET', url, true) // open xhr.setRequestHeader('Accept', 'applic
2020-10-07 15:26:11 224
原创 深拷贝和深度比较
深拷贝 const checkType = source => Object.prototype.toString.call(source).slice(8, -1) const deepClone = source => { let target = null const sourceType = checkType(source) if (sourceType === 'Object') { target = {} } else if (sourceType ===
2020-10-07 15:20:46 126
原创 节流和防抖
节流 const throttle = (fn, interval) => { let last = Date.now() return function () { const self = this // 保存this const args = arguments // 保存arguments const now = Date.now() if (now - last > interval) { last = now fn.app
2020-10-07 15:12:27 49
原创 setTimeout模拟setInterval
setInterval存在的问题 首先明确,无论setTimeout还是setInterval,都是在指定时间,将回调函数推入任务队列,无法保证实际执行时间。 区别在于,setTimeout直接推入,setInterval会检查任务队列中是否存在相同的回调函数(未执行),若有则跳过本次推入。 上图中,setInterval的时间间隔是200ms,但回调函数执行需要较长时间,605ms推入时,发现405ms的回调函数仍未执行,因此跳过本次推入。 由此会引发多个回调函数执行的时间间隔,小于设定
2020-10-07 15:12:21 608
原创 数组操作
扁平化 Array.prototype.flat 参数传入Infinity const flattern = arr => arr.flat(Infinity) 正则表达式 消除数组中的左右括号,简单粗暴 const flattern = arr => JSON.parse('[' + JSON.stringify(arr).replace(/\[|\]/g, '') + ']') reduce const flattern = arr => { return arr.re
2020-10-07 15:12:15 58
原创 jsonp
const jsonp = ({url, params, callbackName}) => { const generateUrl = () => { // 解析参数,生成script标签的src let dataStr = `` for (let key in params) { dataStr += `${key}=${params[key]}&` } dataStr += `callbackName=${callbackName}`
2020-10-07 15:12:09 105
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人