个人总结的前端开发规范
liusaint opened this issue · 0 comments
liusaint commented
JavaScript篇
- 不主动及或误生产全局变量。类似var a = b = 1,会生成全局变量b。
- 嵌套对象或计算而得的变量如果多次使用,则存一个副本。类似这样:
var innerA = document.getElementsByTagName('iframe')[0].contentWindow.a;
var inndrB = document.getElementsByTagName('iframe')[0].contentWindow.b;
修改成
var ifrContent = document.getElementsByTagName('iframe')[0].contentWindow
var innerA = ifrContent.a;
var inndrB = ifrContent.b;
- 类似。jQuery对象,如多次使用需要保存到变量中使用,$()有额外的函数开销。
jQuery对象命名建议以$开头方便区分。
$(this).trigger('click');
$(this).find('.b');
$('.a').trigger('click');
$('.a').find('.b');
修改成
var $this = $(this);
var $a = $('.a');
$this.trigger('click');
$this.find('.b');
$a.trigger('click');
$a.find('.b');
- 减少dom访问和修改次数。比如循环渲染列表,不要拼一条插入一条。而是拼成一整个HTML字符串再统一插入页面节点中,批量修改dom。
- 尽量不要用js直接修改css属性。而是用addClass\removeClass来代替。
- 变量命名
- 普通变量用小驼峰 applePen
- 构造函数使用大驼峰 new Person()
- 私有变量可以以_开头 _getName()
- 尽量英文
- 常量。大写字母,_分割。 MAX_TAB_LENGTH
- 注释
- 难以理解的地方。可能被认为错误的地方。
- 对函数期望的参数、返回值、作者、日期注释。
- 变量定义。尽量定义 在函数开头。一目了然。
function A(){
var a='',b='',c='';
---函数体---
}
- for in循环。必须加Object.hasOwnProperty(prop)过滤属性。
- 增加jQuery实例方法。 注意实例方法中的this指向jQ对象。区别于事件回调函数中的this。
$.fn.extend({
alertValue:function(){
alert(this.val());
}
});
$("input.a").alertValue();//这样调用 this指向$("input.a")
- 增加jQuery工具方法。
$.extend({
alert1:function(){
alert(1);
}
});
$.alert1();//这样调用
- 事件绑定要有清晰的范围意识。比如不要随便进行 $('a').click(fn);这种太通用的标签来直接绑定事件。要将事件的范围限制在可控的范围内。比如同一个模块的函数可以绑定在同一个class名上。
- 模块基本写法。
$(function() {
function Person() {
}
Person.prototype = {
constructor: Person,
bindEvent: function() {
var self = this;
$('body').on('click', '.person-btn', function(event) {
var $this = $(this),
method = '';
if ($this.hasClass('disabled')) {
return;
}
method = $this.attr('method');
typeof self[method] == 'function' && self[method]($this, event);
});
},
sayHello: function($obj, event) {
},
sayGoodbye: function($obj, event) {
}
};
(new Person()).bindEvent();
})
html:
<button class="person-btn" method="sayHello">你好</button>
<button class="person-btn" method="sayGoodbye">再见</button>
- console.log控制台输出。生产环境尽量不要出现。或约定不使用原生console.log。自己封装log函数。
function log(){
if('dev' == window.environment){
console.log.apply(console,arguments);
}
}
log(1,2);//1,2
- 减少if else的层级。
- 函数体不要太长,不要超过一屏。
- 要解绑事件可以考虑在事件绑定的时候就绑定一个命名空间。以免不小心将其他的事件一起解绑了。
- 简单的工具方法可以写成jQuery实例方法或工具方法,复杂的功能组件可考虑以面向对象的方式写。
- 减少try...catch的使用。有错误就让它暴露出来。及时解决。
- 如果函数参数多。可改用option对象的方式来传参。并设置默认值。