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 相关文章推荐
html读出文本文件内容
Jan 22 Javascript
javascript之函数直接量(function(){})()
Jun 29 Javascript
JavaScript面向对象编程
Mar 02 Javascript
用javascript获取当页面上鼠标光标位置和触发事件的对象的代码
Dec 09 Javascript
JS+CSS实现的蓝色table选项卡效果
Oct 08 Javascript
谈谈我对JavaScript DOM事件的理解
Dec 18 Javascript
JavaScript模板引擎Template.js使用详解
Dec 15 Javascript
JavaScript算法教程之sku(库存量单位)详解
Jun 29 Javascript
vue响应式系统之observe、watcher、dep的源码解析
Apr 09 Javascript
jQuery+PHP+Ajax实现动态数字统计展示功能
Dec 25 jQuery
vue实现移动端触屏拖拽功能
Aug 21 Javascript
JavaScript交换变量常用4种方法解析
Sep 02 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
BBS(php &amp; mysql)完整版(一)
2006/10/09 PHP
自定义session存储机制避免会话保持问题
2014/10/08 PHP
Discuz论坛密码与密保加密规则
2016/12/19 PHP
PHP中phar包的使用教程
2017/06/14 PHP
PHP多线程模拟实现秒杀抢单
2018/02/07 PHP
HTML5如何适配 iPhone IOS 底部黑条
2021/03/09 HTML / CSS
Prototype1.5 rc2版指南最后一篇之Position
2007/01/10 Javascript
JQuery 常用操作代码
2010/03/14 Javascript
js判断数据类型如判断是否为数组是否为字符串等等
2014/01/15 Javascript
Node.js中对通用模块的封装方法
2014/06/06 Javascript
浅谈JavaScript function函数种类
2014/12/29 Javascript
js实现文本框宽度自适应文本宽度的方法
2015/08/13 Javascript
javascript性能优化之事件委托实例详解
2015/12/12 Javascript
bootstrap中使用google prettify让代码高亮的方法
2016/10/21 Javascript
input框中的name和id的区别
2016/11/16 Javascript
浅谈JavaScript正则表达式-非捕获性分组
2017/03/08 Javascript
JS实现图片预加载之无序预加载功能代码
2017/05/12 Javascript
推荐VSCode 上特别好用的 Vue 插件之vetur
2017/09/14 Javascript
zTree树形菜单交互选项卡效果的实现方法
2017/12/25 Javascript
vue项目添加多页面配置的步骤详解
2019/05/22 Javascript
解决vue项目中页面调用数据 在数据加载完毕之前出现undefined问题
2019/11/14 Javascript
[01:09]模型精美,特效酷炫!TI9不朽宝藏Ⅰ鉴赏
2019/05/10 DOTA
Linux中Python 环境软件包安装步骤
2016/03/31 Python
Python基于回溯法子集树模板解决马踏棋盘问题示例
2017/09/11 Python
深入理解Python3 内置函数大全
2017/11/23 Python
python开发实例之Python的Twisted框架中Deferred对象的详细用法与实例
2020/03/19 Python
python实现视频压缩功能
2020/12/18 Python
K近邻法(KNN)相关知识总结以及如何用python实现
2021/01/28 Python
什么是抽象
2015/12/13 面试题
协议书怎么写
2014/04/21 职场文书
服务口号大全
2014/06/11 职场文书
单位委托书怎么写
2014/09/21 职场文书
党政领导班子群众路线对照检查材料思想汇报
2014/09/27 职场文书
班级元旦晚会开幕词
2016/03/04 职场文书
十大好看的穿越动漫排名:《瑞克和莫蒂》第一,国漫《有药》在榜
2022/03/18 日漫
Oracle数据库中通用的函数实例详解
2022/03/25 Oracle