javascript之学会吝啬 精简代码


Posted in Javascript onApril 25, 2010

1、吝啬你的代码,用最少的代码做最合适的事情;

比如你的代码中用到了很多document.getElementById(),你是否考虑写一个简单的ID选择器

function $(Id) 
{ 
return document.getElementById(Id); 
}

2、吝啬你的补丁,不要为了实现功能在现有框架上打补丁,而是框架扩展上写实现,如果框架不能扩展,是否考虑部分重构?

比如你已经拥有一套完整的表单正则验证框架,某天你发现某个表单在严重框架里找不到对应的正则,你可能的做法是追加一个if就能简单的实现,可为何不在验证框架里面扩展一个正则,保持代码的干净呢?
、吝啬代码执行的步骤

比如我们在写ajax代码时,我们经常写如下的代码:

var xmlObject; 
function createXMLHTTPRequest() 
{ 
if(window.ActiveXObject) 
{  
xmlObject = new ActiveObject("Microsoft.XMLHTTP"); 
} 
else 
{ 
 
xmlObject = new XMLHTTPRequest(); 
} 
}

但我们每生成一次对象就要进行一次判断,为何不在第一次生成对象后记忆下来,下次直接new呢?改进后如下
var _ajax = function(){ 
_self = this; 
} 
_ajax.prototype = { 
/** 
* 构建http请求对象 
*/ 
_create: function(){ 
var factories = [ 
function(){return new XMLHttpRequest();}, //非IE系列 
function(){return new ActiveXObject("Microsoft.XMLHTTP");}, //IE 
function(){return new ActiveXObject("Msxml2.XMLHTTP");} //IE某些版本 
]; 
for (var i = 0; i < factories.length; i++) { 
try { 
if (factories[i]()) { 
return factories[i]; 
} 
} 
catch (e) { 
continue; 
} 
} 
return factory[2]; 
}(), 
}

这段代码看起来视乎比上面执行步骤多很多,但当第一次调用_ajax._create()后,_ajax._create已经被改变成一个兼容当前浏览器的匿名函数,以后的调用都不再会做判断;
Javascript 相关文章推荐
ExtJs中gridpanel分组后组名排序实例代码
Dec 02 Javascript
JavaScript判断IE版本型号
Jul 27 Javascript
jQuery实现表格行和列的动态添加与删除方法【测试可用】
Aug 01 Javascript
浅谈js对象属性 通过点(.) 和方括号([]) 的不同之处
Oct 29 Javascript
Bootstrap 设置datetimepicker在屏幕上面弹出设置方法
Mar 21 Javascript
细说webpack源码之compile流程-入口函数run
Dec 26 Javascript
使用vuex缓存数据并优化自己的vuex-cache
May 30 Javascript
详解vue中router-link标签所必备了解的属性
Apr 15 Javascript
Vue实现导航栏点击当前标签变色功能
Aug 19 Javascript
vue Treeselect下拉树只能选择第N级元素实现代码
Aug 31 Javascript
解决vant框架做H5时踩过的坑(下拉刷新、上拉加载等)
Nov 11 Javascript
详细聊聊浏览器是如何看闭包的
Nov 11 Javascript
一些相见恨晚的 JavaScript 技巧
Apr 25 #Javascript
Javascript 中的 &amp;&amp; 和 || 使用小结
Apr 25 #Javascript
js 禁用只读文本框获得焦点时的退格键
Apr 25 #Javascript
js 内存释放问题
Apr 25 #Javascript
JavaScript 对象链式操作测试代码
Apr 25 #Javascript
网页上的Javascript编辑器和代码格式化
Apr 25 #Javascript
jQuery温习篇 强大的JQuery选择器
Apr 24 #Javascript
You might like
PHP如何得到当前页和上一页的地址?
2006/11/27 PHP
PHP实现时间轴函数代码
2011/10/08 PHP
关于PHP session 存储方式的详细介绍
2013/06/25 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
php+ajax无刷新上传图片的实现方法
2016/12/06 PHP
PHP实现可添加水印与生成缩略图的图片处理工具类
2018/01/16 PHP
Thinkphp5.0 框架视图view的比较标签用法分析
2019/10/12 PHP
JQuery扩展插件Validate 2通过参数设置验证规则
2011/09/05 Javascript
js给onclick事件赋值,动态传参数实例解说
2013/03/28 Javascript
addEventListener 的用法示例介绍
2014/05/07 Javascript
jQuery基于muipicker实现仿ios时间选择
2016/02/22 Javascript
JavaScript Promise 用法
2016/06/14 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
从0开始学Vue
2016/10/27 Javascript
Mongoose经常返回e11000 error的原因分析
2017/03/29 Javascript
swiper动态改变滑动内容的实现方法
2018/01/17 Javascript
JavaScript数组方法的错误使用例子
2018/09/13 Javascript
微信小程序上传文件到阿里OSS教程
2019/05/20 Javascript
JavaScript函数Call、Apply原理实例解析
2020/02/17 Javascript
Python实现完整的事务操作示例
2017/06/20 Python
详解Python import方法引入模块的实例
2017/08/02 Python
详解python3中zipfile模块用法
2018/06/18 Python
python实现支付宝转账接口
2019/05/07 Python
python os模块简单应用示例
2019/05/23 Python
python使用百度文字识别功能方法详解
2019/07/23 Python
PyTorch中Tensor的维度变换实现
2019/08/18 Python
基于python traceback实现异常的获取与处理
2019/12/13 Python
python3.4中清屏的处理方法
2020/07/06 Python
Python模拟登录和登录跳转的参考示例
2020/10/30 Python
css3个性化字体_动力节点Java学院整理
2017/07/12 HTML / CSS
美国棒球装备和用品商店:Baseball Savings
2018/06/09 全球购物
轻化专业学生实习自我鉴定
2013/09/20 职场文书
新春文艺演出主持词
2014/03/27 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
关于Python中*args和**kwargs的深入理解
2021/08/07 Python
阿里面试Nacos配置中心交互模型是push还是pull原理解析
2022/07/23 Java/Android