当前位置: 首页 > news >正文

JavaScript手写函数

手写一个 new

function create() {// 创建一个空对象let obj = new Object();// 参数转数组var args = Array.prototype.slice.call(arguments);// 获取构造函数let Con = args[0];// 链接原型obj._proto_ = Con.prototype;// binding thislet result = Con.apply(obj, args.slice(1));// return objreturn typeof result === "object" ? result : obj;
}

手写一个 call

Function.prototype.myCall = function (params) {// 获取对象let params = params || window;// 将作用域添加到新函数里params.fn = this;// 获取参数let args = [...arguments].slice(1);// 执行新函数let result = parmas.fn(...args);// 删除函数delete params.fn;return result;
};

手写一个 apply

Function.prototype.myApply = function (params) {// 获取对象let params = params || window;// 将作用域添加到新函数里params.fn = this;let result = null;if (argments[1]) {result = parmas.fn(...arguments[1]);} else {result = parmas.fn();}// 删除函数delete params.fn;return result;
};

手写一个 bind

Function.prototype.myBind = function (context) {let _this = this;return function F() {if (this instanceof F) {return new _this(...arguments);}return _this.apply(context, [...arguments]);};
};

手写一个防抖函数

防抖函数的作用是事件调用之后隔一段时间再处理函数,如果在时间之内再次触发事件就清除原来的时间重新计时。

// 要防抖的函数
function ajax(args) {console.log(args);
}// 封装防抖函数
function debounce(fn, delay) {return function (args) {// 保存作用域var _this = this;// 清除定时器clearTimeout(fn.timer);// 执行定时器fn.timer = setTimeout(function () {fn.call(_this, args);}, delay);};
}var fn = debounce(ajax, 300);var input = document.getElementById("a");
input.addEventListener("keyup", function (event) {fn(event.target.value);
});

手写一个节流函数

节流函数的作用是在规定事件之内只触发一次函数

function ajax(args) {console.log(args);
}function throttle(fn, delay) {// 前一个时间let preTime;return function (args) {var _this = this;// 现在时间var newTime = +new Date();// 判断是否在时间差之内触发事件if (newTime - preTime < delay) {clearTimeout(fn.timer);fn.timer = setTimeout(function () {preTime = +new Date();fn.call(_this, args);}, delay);} else {preTime = +new Date();fn.call(_this, args);}};
}var fn = throttle(ajax, 1000);
var input = document.getElementById("a");
input.addEventListener("keyup", function (event) {fn(event.target.value);
});
http://www.jsqmd.com/news/42909/

相关文章:

  • 美国本科申请中介怎么选?2025口碑TOP5出炉,藤校资源/申请成功率双保障
  • 2025 最新冷库建造厂家推荐!医药 / 食品 / 物流 / 小型 / 大型 / 自动化冷库建造厂家企业品牌权威排行榜
  • 语句的执行
  • 房产信息管理系统
  • 10. 准入控制器
  • 2025 最新推荐!保定篮球俱乐部培训中心实力榜单:揭秘行业顶尖机构服务与教学优势权威指南
  • work5
  • 2025年南京高功率密度电源公司推荐,高功率密度电源/电源模块/军用电源/全国产化电源/氢能源车载直流转换器生产直销有哪些
  • 2025 年最新推荐冷库安装厂家排行榜,小型冷库 / 医药疫苗冷库 / 智能冷库设备安装实力企业口碑推荐
  • 2025美国研究生申请认准这些机构!藤校offer收割机/背景提升全流程,实力中介测评
  • fdisk linux分区
  • exe文件在linux
  • CAD开发-AutoCAD Code Pack 封装包
  • Wan2.2-I2V-A14B的推理加速库:xFormers与FlashAttention性能测试
  • 常见问题 --- Bad register number passed to arm.get register value
  • 2025 年最新制氮机厂家推荐排行榜:激光切割 / 防爆 / 化工等多场景精选,技术与服务双优指南金属加工制氮机/医药农业制氮机/SMT制氮机公司推荐
  • Wan2.2-Remix - 专注于人物动态、逼真运动和场景一致性图生视频 支持NSFW WebUI+ComfyUI工作流 一键整合包下载
  • eclipse下载 linux
  • Ovi: Twin Backbone Cross-Modal Fusion for Audio-Video Generation
  • 在保留旧版本 Python 的同时,安全地使用或切换到新版本,而不破坏原有项目或系统依赖
  • 大威德
  • 2025 最新滚珠丝杠厂家推荐!重负载 / 精密 / 轧制 / 研磨滚珠丝杠全品类榜单,国产优质品牌实力测评与选购指南
  • 2025年长沙心理咨询机构实力排名,在线/线上企业口碑排行
  • 现代多核处理器上上下文切换对 CPU 缓存性能的延迟和吞吐量影响
  • 半导体静态电性测试系统STD2000X可测试的器件种类和参数 - FORCREAT
  • 2025年长沙心理咨询优质机构排名盘点,线上/在线企业推荐排行榜
  • 新手小白电脑常用快捷键
  • 2025年美国留学中介哪家强,藤校申请/全程规划/背景提升/签证辅导/求职赋能优质机构推荐
  • 语义分割
  • eclipse linux 下载