全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

JS设计模式之惰性模式(二)

惰性模式:减少代码每次执行时的重复性判断,通过重新定义对象来避免原对象中的分支判断,提高网站性能。

例如针对不同浏览器的事件注册方法:

var AddEvent = function(dom, type, fn){
 if(dom.addEventListener){
 dom.addEventListener(type, fn, false);
 }else if(dom.attachEvent){
 dom.attachEvent('on'+type, fn);
 }else{
 dom['on'+type] = fn;
 }
}

从上面的方法可以发现,每次为元素绑定事件时,都会进行检测判断,这是多余的,因为在同一浏览器中分支判断结果是唯一的,不可能走不同的分支。

我们可以用惰性模式来解决这个问题,既然第一次调用该方法时已经判断过了,那么就可以在第一次执行时根据判断结果重新定义该方法。

惰性模式主要有两种实现方法:

加载即执行:JavaScript文件加载时通过闭包执行对方法进行重新定义,在页面加载时会消耗一定的资源。

var AddEvent = function(dom, type, fn){
 if(dom.addEventListener){
return function(dom, type, fn){
 dom.addEventListener(type, fn, false);
 }
 }else if(dom.attachEvent){
return function(dom, type, fn){
 dom.attachEvent('on'+type, fn);
 }
 }else{
return function(dom, type, fn){
 dom['on'+type] = fn;
 }
 }
}();

惰性执行:第一次执行函数时在函数内部对其进行显示重写,最后调用重写后的方法完成第一次方法调用。

var AddEvent = function(dom, type, fn){
 if(dom.addEventListener){
AddEvent = function(dom, type, fn){
 dom.addEventListener(type, fn, false);
 }
 }else if(dom.attachEvent){
AddEvent = function(dom, type, fn){
 dom.attachEvent('on'+type, fn);
 }
 }else{
AddEvent = function(dom, type, fn){
 dom['on'+type] = fn;
 }
 }
 AddEvent(dom, type, fn);
};


加载即执行不同的是,JS文件加载完成后,惰性执行的函数还没有被重新定义,当函数被首次调用时才会被重定义。这两种惰性方式都避免了冗余的分支判断。

惰性模式的应用场景非常广泛,特别是当今浏览器种类繁多的现象,很多功能在不同浏览器中实现不一,为了兼容不同的浏览器,代码中往往会有许多对不同浏览器的分支判断,比如事件处理、XMLHttpRequest对象创建等,造成代码臃肿冗余,惰性模式正好可以解决这种问题,提高代码执行效率。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。


# JS  # 设计模式  # 惰性模式  # 浅析AngularJS中的生命周期和延迟处理  # 如何用JavaScript实现一个数组惰性求值库  # JavaScript中的惰性载入函数及优势  # JavaScript惰性载入函数实例分析  # JavaScript惰性求值的一种实现方法示例  # 从延迟处理解析JavaScript惰性编程  # 加载  # 重写  # 的是  # 这是  # 器中  # 还没有  # 过了  # 首次  # 可以用  # 有许多  # 对其  # 有两种  # 这两种  # 往往会  # 时才  # 绑定  # 解决这个问题  # 大家多多  # 就可以  # 能走 


相关文章: 制作营销网站公司,淘特是干什么用的?  平台云上自助建站如何快速打造专业网站?  如何基于云服务器快速搭建个人网站?  如何自定义建站之星网站的导航菜单样式?  如何在Golang中处理模块冲突_解决依赖版本不兼容问题  寿县云建站:智能SEO优化与多行业模板快速上线指南  如何破解联通资金短缺导致的基站建设难题?  智能起名网站制作软件有哪些,制作logo的软件?  公众号网站制作网页,微信公众号怎么制作?  阿里云网站搭建费用解析:服务器价格与建站成本优化指南  手机怎么制作网站教程步骤,手机怎么做自己的网页链接?  C++时间戳转换成日期时间的步骤和示例代码  建站之星图片链接生成指南:自助建站与智能设计教程  c# Task.ConfigureAwait(true) 在什么场景下是必须的  如何在Golang中引入测试模块_Golang测试包导入与使用实践  如何快速搭建高效服务器建站系统?  建站主机是否等同于虚拟主机?  北京网站制作费用多少,建立一个公司网站的费用.有哪些部分,分别要多少钱?  如何在万网ECS上快速搭建专属网站?  ,交易猫的商品怎么发布到网站上去?  制作国外网站的软件,国外有哪些比较优质的网站推荐?  c# 在高并发场景下,委托和接口调用的性能对比  seo网站制作优化,网站SEO优化步骤有哪些?  如何在橙子建站上传落地页?操作指南详解  如何快速搭建虚拟主机网站?新手必看指南  教程网站设计制作软件,怎么创建自己的一个网站?  如何在IIS中新建站点并解决端口绑定冲突?  定制建站价位费用解析与套餐推荐全攻略  如何高效完成自助建站业务培训?  免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?  安徽网站建设与外贸建站服务专业定制方案  怎么制作网站设计模板图片,有电商商品详情页面的免费模板素材网站推荐吗?  建站之星导航配置指南:自助建站与SEO优化全解析  魔毅自助建站系统:模板定制与SEO优化一键生成指南  电视网站制作tvbox接口,云海电视怎样自定义添加电视源?  正规网站制作公司有哪些,目前国内哪家网页网站制作设计公司比较专业靠谱?口碑好?  三星网站视频制作教程下载,三星w23网页如何全屏?  C++ static_cast和dynamic_cast区别_C++静态转换与动态类型安全转换  网站制作软件免费下载安装,有哪些免费下载的软件网站?  海南网站制作公司有哪些,海口网是哪家的?  香港服务器WordPress建站指南:SEO优化与高效部署策略  官网建站费用明细查询_企业建站套餐价格及收费标准指南  广东企业建站网站优化与SEO营销核心策略指南  怎么用手机制作网站链接,dw怎么把手机适应页面变成网页?  专业公司网站制作公司,用什么语言做企业网站比较好?  高端云建站费用究竟需要多少预算?  武汉网站如何制作,黄黄高铁武穴北站途经哪些村庄?  音响网站制作视频教程,隆霸音响官方网站?  ,怎么在广州志愿者网站注册?  如何快速登录WAP自助建站平台? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。