我不知道现在生活中的苦是不是对自己是一种好处,我也不知道现在的好是不是坏处,希望一切的一切会更好。
我想写这篇文章好久了,有的时候都不知道自己从那写起。从基础写起,又怕被喷,太难了,又怕自己写的不好,又被喷。最好我想想还是写下这篇文章,可以说这是我干这么多年总结下来的结晶了。
JavaScript模式
说起这个,如果是程序员的应该都不陌生,我只不过他大家平时用到的,写下来系统化罢了,没什么大不了,嘿嘿。
好了说了半天,大家以为我在写心情,嘿嘿说说正题吧。
1.基本原则
原则问题不能变,写模式唯一的好处就是可维护性好,编写出让人羡慕的代码才会是好代码。
1.1 编写可维护的代码
特性:阅读性好,具有一致性,预见性好,看起来如同一个人编写的,有文档
1.2 尽量少用全局变量
全局变量的坏处真是大大的,为了一个全局变量,有多少bug产生,有多少程序员要加班加点的干活。
我这里就写一个原因,全局变量多的代码不好移植。页面上会有很多其他开发人员编写的代码。如果其中一个广告合作伙伴的脚本有x这个全局变量,你的脚本大量使用x的话,那么多发生什么事情,
大家可见一斑了,非常的恶劣的bug。
写一段代码:
<script type="text/javascript">
<!--
globleParam = "HellWorld";
console.log(globleParam);
console.log(window.globleParam);
console.log(window["globleParam"]);
console.log(this.globleParam);
//-->
</script>
上面写了关于全局变量的调用
1.3 变量释放的难题
使用var创建的全局变量不能删除
不使用var创建的隐含全局变量可以删除
这说明隐含全局变量严格来讲不是真正的变量,而是全局对象的属性,属性可以通过delete操作符删除,但变量不可以
例子:
<script type="text/javascript">
<!--
var global_1 = 1;
global_2 = 2;
(function(){
global_3 = 3;
}());
delete global_1;
delete global_2;
delete global_3;
console.log(typeof global_1);
console.log(typeof global_2);
console.log(typeof global_3);
//-->
</script>
1.4 简单的访问全局变量
var global = (function(){
return this;
}());
有的时候,为了快速得到全局对象,必须用这种方式
1.5单一var模式
这个可以说我是看jquery框架时候,感觉的。然后在网上查询了一下,发现大家也在用这个模式,很简单,就是将变量都放到一个var中,这样好处避免出现上面的全局变量问题还有就是变量复写的问题
1.6 for循环的小细节
在for中,要使用单一var这个模式,这个会节省很多不必要的计算时间的问题
比如:
for(var i = 0 ,max = myarray.length;i<max;i+=1){
}
1.7 for-in中的小判断
for-in要进行属性检查,这个避免clone方法等不必要的方法进行操作
<script type="text/javascript">
<!--
var people = {
name:'chenhailong',
age:'30',
sex:'male'
}
if(typeof Object.prototype.clone === 'undefined')
{
Object.prototype.clone = function(){};
}
for(var i in people)
{
if(people.hasOwnProperty(i)){
console.log(i,":",people[i]);
}
}
for(var i in people)
{
console.log(i,":",people[i]);
}
//-->
</script>
1.8 在程序中要用“===”进行判断
这样加上类型判断
1.9 避免使用eval()
eval是魔鬼,eval内部可以看作是全局变量,和上面的全局模式一样,尽量少用。
1.10关于parseInt()的思考
下面举一个例子:
<script type="text/javascript">
<!--
var i = "09",
j = "06";
i = parseInt(i);
j = parseInt(j);
console.log(i,j);
i = new Number("09");
j = new Number("06");
console.log(i.toString(),j.toString());
i = "09";
j = "06";
i = parseInt(i,10);
j = parseInt(j,2);
console.log(i,j);
//-->
parseInt()的时候一下,要注意进制问题
1.11添加Doc文档
YUIDoc范例:
我自己写了文章,下面提供链接
http://chenhailong.iteye.com/admin/blogs/1724746
你也出的javasscript source 一定要生成YUIDoc文档的,我希望大家这样,袁芳你怎么看?
1.12 我不知道大家用没用过JSLint,一个非常好的工具,可以这样说,我现在所有写的规范模式,JSLint上面都有检查,如果你不符合上面写的东西,JSLint就是警告或者报错哦
我也强烈建议大家使用这个软件,原因有很多,最主要的是方便和减少bug的量,让你写出的代码大家去羡慕去吧。
太长了,我就写到这里,可以参看后文。