博客
关于我
js高阶编程之---单例模式,XHR兼容 (惰性思想)
阅读量:646 次
发布时间:2019-03-15

本文共 1435 字,大约阅读时间需要 4 分钟。

高级JS编程中的惰性思想:能一次性完成的任务,不需要多次执行。

项目中的单例模式(惰性思想_案例1)

在实际项目开发中,惰性思想能够显著提升效率。以下是一个典型案例:获取CSS属性值的方法。

var utils = (function() {    var flag = 'getComputedStyle' in window;    function getCss(attr) {        var val = null, reg = null;        if (flag) {            val = window.getComputedStyle(this, null)[attr];        } else {            if (attr === 'opacity') {                val = this.currentStyle['filter'];                reg = /^alpha\(opacity=(\d+(?:\.\d+)?)\)$/;                val = reg.test(val) ? reg.exec(val)[1]/100 : 1;            } else {                val = this.currentStyle[attr];            }        }        reg = /^(-?\d+(\.\d+)?)((px|pt|em|rem)?$/);        return reg.test(val) ? parseFloat(val) : val;    }    return {getCSS: getCSS};})();

应用场景:

  • 该方法用于获取元素的CSS属性值。
  • 在标准浏览器中,使用getComputedStyle
  • 在IE6-8中,则需要额外处理opacity属性,并通过正则表达式转换filter值。

调用示例:

utils.getCSS.call(curEle, 'width');

惰性思想_案例2

在实际开发中,好多方法需要逐次尝试才能找出最终可用的版本。以下是一个典型案例:创建AJAX对象的兼容性处理。

function createXHR() {    var xhr = null,        flag = false,        ary = [            function(){return new XMLHttpRequest();},            function(){return new ActiveXObject('Microsoft.XMLHTTP');},            function(){return new ActiveXObject('Msxml2.XMLHTTP');},            function(){return new ActiveXObject('Msxml3.XMLHTTP');}        ];    for (var i=0; i

核心思想:

  • 这种懒初始化方式,能够在出现错误时,自动尝试下一个候选方案。
  • 一旦找到可行的方法,就立即固定到createXHR,避免重复判断。

这样的方法在处理浏览器兼容问题时,能够显著降低调试成本和开发复杂度。

转载地址:http://laymz.baihongyu.com/

你可能感兴趣的文章
使用 TortoiseGit 时,报 Access denied 错误
查看>>
基于 HTML5 WebGL 的污水处理厂泵站自控系统
查看>>
django-表单之模型表单渲染(六)
查看>>
c++之程序流程控制
查看>>
spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
查看>>
有道云笔记 同步到我的博客园
查看>>
李笑来必读书籍整理
查看>>
Hadoop(十六)之使用Combiner优化MapReduce
查看>>
《机器学习Python实现_10_06_集成学习_boosting_gbdt分类实现》
查看>>
CoreCLR源码探索(八) JIT的工作原理(详解篇)
查看>>
andriod 开发错误记录
查看>>
C语言编译错误列表
查看>>
看明白这两种情况,才敢说自己懂跨链! | 喵懂区块链24期
查看>>
CentOS5 Linux编译PHP 报 mysql configure failed 错误解决办法
查看>>
pycharm新建文件夹时新建python package和新建directory有什么区别?
查看>>
python中列表 元组 字典 集合的区别
查看>>
Android DEX加固方案与原理
查看>>
iOS_Runtime3_动态添加方法
查看>>
Leetcode第557题---翻转字符串中的单词
查看>>
Problem G. The Stones Game【取石子博弈 & 思维】
查看>>