手写Pollyfill有哪些
发表于:2025-01-19 作者:千家信息网编辑
千家信息网最后更新 2025年01月19日,这篇文章主要介绍了手写Pollyfill有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇手写Pollyfill有哪些文章都会有所收获,下面我们一起来看看吧。new测试
千家信息网最后更新 2025年01月19日手写Pollyfill有哪些
这篇文章主要介绍了手写Pollyfill有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇手写Pollyfill有哪些文章都会有所收获,下面我们一起来看看吧。
new
测试用例:
function Fn (name) { this.name = name}console.log(myNew(Fn('lulu')))
实现:
function myNew () { const obj = {} const Fn = Array.prototype.shift.call(arguments) // eslint-disable-next-line no-proto obj.__proto__ = Fn.prototype const returnVal = Fn.apply(obj, arguments) return typeof returnVal === 'object' ? returnVal : obj}
bind
测试用例:
this.x = 9const obj = { x: 81, getX: function () { return this.x }}console.log(obj.getX()) // 81const retrieveX = obj.getXconsole.log(retrieveX()) // 9const boundGetX = retrieveX.bind(obj)console.log(boundGetX()) // 81
实现:
Function.prototype.mybind = function () { const outerArgs = Array.from(arguments) const ctx = outerArgs.shift() const self = this return function () { const innerArgs = Array.from(arguments) return self.apply(ctx, [...outerArgs, ...innerArgs]) }}
instanceof
测试用例:
console.log(myInstanceof("111", String)); //falseconsole.log(myInstanceof(new String("111"), String));//true
实现:
function myInstanceof(left, right) { //基本数据类型直接返回false if(typeof left !== 'object' || left === null) return false; //getProtypeOf是Object对象自带的一个方法,能够拿到参数的原型对象 let proto = Object.getPrototypeOf(left); while(true) { //查找到尽头,还没找到 if(proto == null) return false; //找到相同的原型对象 if(proto == right.prototype) return true; proto = Object.getPrototypeOf(proto); }}
debounce
在规定时间内函数只会触发一次,如果再次触发,会重新计算时间。
/*** * @description 防抖函数 * @param func 函数 * @param wait 延迟执行毫秒数 * @param immediate 是否立即执行 * */function debouncing(func, wait = 1000, immediate = true) { let timer = null; return function () { let args = arguments; let context = this; if (timer) { clearTimeout(timer); } if (!immediate) { //第一种:n秒之后执行,n秒内再次触发会重新计算时间 timer = setTimeout(() => { //确保this指向不会改变 func.apply(context, [...args]); }, wait); } else { //第二种:立即执行,n秒内不可再次触发 let callnew = !timer; timer = setTimeout(() => { timer = null; console.log('kaka') }, wait); if (callnew) func.apply(context, [...args]) } }}function fn() { console.log('debluncing')}let f1 = debouncing(fn, 1000);setInterval(() => { f1()}, 1000);
throttle
节流指的是函数一定时间内不会再次执行,用作稀释函数的执行频率。
/** * @description 节流函数 * @param func 函数 * @param wait 延迟执行毫秒数 * @param type 1:时间戳版本 2: 定时器版本 * */function throttle(func, wait = 1000, type = 1) { if (type === 1) { let timeout = null; return function () { const context = this; const args = arguments; if (!timeout) { timeout = setTimeout(() => { timeout = null; func.apply(context, [...args]); }, wait); } } } else { let previous = 0; return function () { const context = this; const args = arguments; let newDate = new Date().getTime(); if (newDate - previous > wait) { func.apply(context, [...args]); previous = newDate; } } }}function fn() { console.log('throttle')}const f1 = throttle(fn);setInterval(() => { f1()}, 100);
deepClone
测试用例:
const map = new Map()map.set('key', 'value')map.set('name', 'kaka')const set = new Set()set.add('11').add('12')const target = { field1: 1, field2: undefined, field3: { child: 'child' }, field4: [ 2, 8 ], empty: null, map, set}target.target = targetconst target1 = deepClone(target)target1.a = 'a'console.log('
关于"手写Pollyfill有哪些"这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对"手写Pollyfill有哪些"知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。
函数
时间
再次
测试
对象
知识
内容
原型
版本
篇文章
延迟
相同
价值
参数
定时器
指向
操作简单
数据
文章
方法
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
编程和软件开发一样吗
医院网络安全心得体会
茅台酒鉴定软件开发
bms应用层软件开发培训
徐汇区一站式软件开发代理价格
数据分析能用收银系统数据库吗
普陀区个性化网络技术转让材料
app id 连接服务器失败
贵港天气预报软件开发
core怎么加载数据库
富瑞盈网络技术有限公司
魔兽世界3.35数据库编号
odbc数据库技术的意义
软件开发的税费
网络维护安全和网络安全
数据库查询的函数
电脑做打印服务器
重庆有名的互联网科技公司
深圳软件开发公司 长沙分公司
天津文件服务器机柜云空间
开源存储服务器管理
数据库能力指标
长岛游戏软件开发外包公司
郑州app软件开发如何收费
数据库是数据调查机构吗
微信软件开发原理
修改数据库后一定要更新实时库
充值软件开发公司
数据库的实际应用
有什么经管数据库