javascript中惰性载入函数
来源:互联网 发布:淘宝卖家自建物流 编辑:程序博客网 时间:2024/05/29 02:21
javascript中惰性载入函数
在<javascript高级程序设计>这本书中看到的,在此做一下记录, 感觉还是很有用的. 就从大家都知道的创建xhr对象方法说起
我们都知道如果创建一个xhr对象(不会写,不怕,有百度,嘿嘿)
function createXHR(){ if (typeof XMLHttpRequest != "undefined"){ return new XMLHttpRequest(); } else if (typeof ActiveXObject != "undefined"){ if (typeof arguments.callee.activeXString != "string"){ var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"], i,len; for (i=0,len=versions.length; i < len; i++){ try { new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; break; } catch (ex){ //跳过 } } } return new ActiveXObject(arguments.callee.activeXString); } else { throw new Error("No XHR object available."); } }
这个函数相信大家都见过,每次调用createXHR的时候,都要检测浏览器是否支持XMLHttpRequest对象,里面基本上都是一层一层的if…else… 还有 try…catch….每次都这样,想想也烦.
看看书中的方法:
第一种方法
function createXHR(){ if (typeof XMLHttpRequest != "undefined"){ createXHR = function(){ return new XMLHttpRequest(); }; } else if (typeof ActiveXObject != "undefined"){ createXHR = function(){ if (typeof arguments.callee.activeXString != "string"){ var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"], i, len; for (i=0,len=versions.length; i < len; i++){ try { new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; break; } catch (ex){ //skip } } } return new ActiveXObject(arguments.callee.activeXString); }; } else { createXHR = function(){ throw new Error("No XHR object available."); }; } return createXHR(); }
这里我们发现, 每一次分支都会对createXHR赋值 , 在第一次执行createXHR的时候,如果有内置的XMLHttpRequest对象,createXHR函数会被覆盖,下次再调用的时候,就会调用已经被覆盖的createXHR函数,直接返回一个XMLHttpRequest对象,其他的分支也是类似的, 最后一步就是调用新的createXHR函数
这里的情景是:浏览如果支持内置的XHR或者基于ActiveX的XHR,就会一直支持,在这种情况下,其实只需要一次检测就够了,所以覆盖createXHR是合适的
第二种方法
var createXHR = (function(){ if (typeof XMLHttpRequest != "undefined"){ return function(){ return new XMLHttpRequest(); }; } else if (typeof ActiveXObject != "undefined"){ return function(){ if (typeof arguments.callee.activeXString != "string"){ var versions = ["MSXML2.XMLHttp.6.0", "MSXML2.XMLHttp.3.0", "MSXML2.XMLHttp"], i, len; for (i=0,len=versions.length; i < len; i++){ try { new ActiveXObject(versions[i]); arguments.callee.activeXString = versions[i]; break; } catch (ex){ //skip } } } return new ActiveXObject(arguments.callee.activeXString); }; } else { return function(){ throw new Error("No XHR object available."); }; } })();
第二种其实和第一种逻辑上是一样的,只不过多了第一行代码(使用var定义函数)、新增了自执行的匿名函数
总体来说,这个惰性载入函数还是有点价值的吧,只是牺牲一点性能和代码量,就能减少不必要执行的代码,但是注意会覆盖原来的函数…
0 0
- javascript中惰性载入函数
- JavaScript 惰性载入函数
- JavaScript 函数惰性载入
- JavaScript 函数惰性载入
- JavaScript函数惰性载入
- JavaScript 惰性载入函数
- JavaScript惰性载入函数
- JavaScript-编程技巧-惰性载入函数
- JavaScript-JS优化与惰性载入函数
- 利用函数的惰性载入提高javascript代码性能 转
- 利用函数的惰性载入提高 javascript 代码性能
- 利用函数的惰性载入提高javascript代码性能
- 代码优化--惰性载入函数
- 惰性载入
- 惰性载入函数的使用--验证
- javaScript函数惰性加载
- javascript惰性函数
- JavaScript高级函数-----惰性函数
- 设计模式总结
- iOS中OpenGL-ES渲染YUV视频
- CBATTRequest 学习笔记
- OpenGL--多边形偏移
- Web前端技巧_HTML+CSS+JavaScript (个人经验)
- javascript中惰性载入函数
- 风靡全网的H5究竟是什么?
- 使用replace pioneer批量修改文件名
- 第六周 项目一--深复制体验(2)
- CBCharacteristic学习笔记
- NEFU559 分书问题【递归】
- Android Studio 生成 ButterKnife 注入的插件
- Win7下用IIS发布网站
- lavarel 添加html 和 form 标签