手写Pollyfill有哪些
发表于:2025-11-17 作者:千家信息网编辑
千家信息网最后更新 2025年11月17日,这篇文章主要介绍了手写Pollyfill有哪些的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇手写Pollyfill有哪些文章都会有所收获,下面我们一起来看看吧。new测试
千家信息网最后更新 2025年11月17日手写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安全错误
数据库的锁怎样保障安全
西林县公安局网络安全主题宣传
一个软件开发包括什么文件
国产化电脑的网络安全
音色下载软件开发
泰安泰盈软件开发靠谱吗
软件开发中的 pd
孩子们网络安全手抄报
网络安全产值
魔兽世界 服务器最好
软件开发费电脑吗
jsp查询数据库语句
双鸭山市网络安全法
云服务器 阿里云
天津通用软件开发定做价格
金盾信安杯网络安全大赛题
广州网络技术发展
南京晓庄学院数据库原理实验
游戏服务器就近调度
如何提高我的世界的服务器
分辨率显示服务器连接失败
无线网络技术支撑适合女生吗
管理服务器上的数据库
信和义网络技术工作室
央企网络安全高级工程师信息
什么大学计算机编程软件开发
和网络公司签软件开发合同
kvm 管理多个服务器
为什么要规范软件开发文档
建筑施工安全隐患数据库
网络安全法的学习体会