`

JavaScript重构(四):JavaScript编码规则

阅读更多

没有规矩,不成方圆,JavaScript带来了灵活性,也带来了不受控的变量和访问,所以要用规则限制它。一支成熟的团队,还是一支新鲜的团队,规则应当是不一样的,我只是列出一些常见的或者有效的办法,来约束跳跃的开发人员,思维可以任意飞跃,代码却要持续受控。当然,任何规则都是建立在一定的认知基础之上的,面向对象JavaScript的基础是必备的,否则一切无从谈起。

 

变量和方法控制:

模块开发不允许存放独立的全局变量、全局方法,只允许把变量和方法放置到相应模块的“命名空间”中,对此的解释请参见此文。实在心痒了,那么使用匿名函数如何?

(function() { 
  var value = 'xxx'; 
  var func = function() {...}; 
})();

 

模块化需要严格控制住代码的区域性,这不仅仅是代码可维护性、可定制性的一方面,同时也让JavaScript引擎在属性和方法使用完毕后及时地回收掉。

不允许在模块代码中污染原生对象,例如

String.prototype.func = new function(){...}; 

 

如此的代码必须集中控制,例如统一放置在common.js中,严格保护起来。

 

数据存放约束:

普通变量、prototype变量和function变量分而治之,方法名一律大写开头,变量名还是遵从骆驼命名法如何:

function T(name){ 
  T.prototype._instance_number++; 
  this.name = name; 
  this.showName=function(){ 
    alert(this.name); 
  } 
}; 
T.prototype = { 
  _instance_number:0, 
  getInstanceNum: function(){ 
    return T.prototype._instance_number; 
  } 
}; 

var t = new T("PortalONE"); 
t.showName(); 
new T("Again"); 
alert(t.getInstanceNum()); //打印:2

 

这里有意做了一件事情,T内部的属性和私有方法使用下划线开头,这样很好地实现了封装(上述代码中如果使用t.instanceNum,是无法访问到这个值的),如果这段代码都看不懂的话,赶紧温习一下JavaScript的面向对象吧 :)。JavaScript中提供了闭包和原型两种办法来实现继承和多态,关于重构中应用这一点,后续的章节我再啰嗦吧。

另外,优先使用JavaScript的原生对象和容器,比如Array,Ajax的数据类型统一切到JSON上来,尽量不要使用隐藏域;另外,通常是不允许随意扩展DOM对象的。

 

利用闭包特性,这一点可以做得更优雅:

var User = function(){
    var name;
    this.setName = function(newName){
        name = newName;
    };
    this.getName = function(){
        return name;
    };
};

访问的时候具备如下封装效果:

var user = new User();
user.setName("abc");
alert(user.getName()); //abc
alert(user.name);         //undefined

 

至于模块间的通信:模块间的通信意味着模块间的耦合性,是需要严格避免的;通信的途径通常使用方法级属性或者模块级的prototype变量。

 

DOM操纵规则:

在模块代码中,通常要求把对DOM的操纵独立到模块js中,应当避免在DOM模型上显示地写时间触发函数,例如:

<div onclick="xxx" />

借助JQuery基于bind的一系列方法,把行为逻辑独立出来以后,完全可以看到清爽的HTML标签。

DOM对象的访问通常使用id来查找,偶有根据name来查找的,过多次数地、不合理地遍历DOM树是前端性能保持的大忌。

 

CSS的样式控制:

(1)尽量拒绝style="xxx"的写法,主要目的是将样式统一到主题样式表单中,当然主题样式表单也是按模块存放的,对于不同语种的定制和不同风格的切换带来便利。

(2)规约JavaScript对样式的操纵,理想状况下,封装性好的UI可以自由地替换它的样式集合。

 

以上只能算冰山一角,抛砖引玉,实际项目中需要在开发过程中逐步细化和完善。

 

文章系本人原创,转载请注明作者和出处

分享到:
评论
5 楼 RayChase 2012-02-22  
踏月流星 写道
在你的“DOM操纵规则”中,提倡尽量使用bind的方式来给dom绑定事件。个人认为,如果页面中的事件比较多的话,页面加载的时候,这些事件对象就已经加载到了内存中,岂不是对性能会有更大的影响?

目前我还没有了解到JQ的事件绑定会对前端性能带来显著影响,如果你有这方面的了解,欢迎分享。
4 楼 踏月流星 2012-02-22  
在你的“DOM操纵规则”中,提倡尽量使用bind的方式来给dom绑定事件。个人认为,如果页面中的事件比较多的话,页面加载的时候,这些事件对象就已经加载到了内存中,岂不是对性能会有更大的影响?
3 楼 踏月流星 2012-02-22  
RayChase 写道
Dev|il 写道
引用:这里有意做了一件事情,T内部的属性和私有方法使用下划线开头,这样很好地实现了封装(上述代码中如果使用t.instanceNum,是无法访问到这个值的)

楼主你的上述代码中哪里出现聊instanceNum这个属性,如果是_instance_number,那t._instance_number也能够访问

可能是我这里描述不清晰,这里包含两种方式:

一种办法是给类成员变量添加下划线,比如this.userName变成this._user_name,这样表示其为私有变量,外部不要随便访问;

还有一种方式是利用闭包的特点来完成,我补充在文中了:
var User = function(){ 
    var name; 
    this.setName = function(newName){ 
        name = newName; 
    }; 
    this.getName = function(){ 
        return name; 
    }; 
};
效果:
alert(user.getName()); //abc 
alert(user.name);      //undefined

也就是说:你的第一种方式,只是一种人为约定的一种封闭方式。从代码逻辑上来说,并不是真的无法访问了 .
2 楼 RayChase 2012-02-11  
Dev|il 写道
引用:这里有意做了一件事情,T内部的属性和私有方法使用下划线开头,这样很好地实现了封装(上述代码中如果使用t.instanceNum,是无法访问到这个值的)

楼主你的上述代码中哪里出现聊instanceNum这个属性,如果是_instance_number,那t._instance_number也能够访问

可能是我这里描述不清晰,这里包含两种方式:

一种办法是给类成员变量添加下划线,比如this.userName变成this._user_name,这样表示其为私有变量,外部不要随便访问;

还有一种方式是利用闭包的特点来完成,我补充在文中了:
var User = function(){ 
    var name; 
    this.setName = function(newName){ 
        name = newName; 
    }; 
    this.getName = function(){ 
        return name; 
    }; 
};
效果:
alert(user.getName()); //abc 
alert(user.name);      //undefined
1 楼 Dev|il 2012-02-10  
引用:这里有意做了一件事情,T内部的属性和私有方法使用下划线开头,这样很好地实现了封装(上述代码中如果使用t.instanceNum,是无法访问到这个值的)

楼主你的上述代码中哪里出现聊instanceNum这个属性,如果是_instance_number,那t._instance_number也能够访问

相关推荐

    javascript-refactoring:我在编码塞尔维亚会议上的演讲资料库

    "javascript-refactoring:我在编码塞尔维亚会议上的演讲资料库"是一个专门探讨JavaScript重构主题的资源集合,源自2014年10月10日在编码塞尔维亚会议上的一次演讲。 重构是针对现有代码进行的结构改进,而不改变其...

    CSS重构:样式表性能调优_前端学习_

    因此,CSS重构旨在解决这些问题,通过整理规则、减少重复、提高选择器效率等方式,使CSS更加高效。 以下是一些关键的CSS重构和性能优化知识点: 1. **选择器优化**:避免使用过于复杂的选择器,例如后代选择器(`...

    JavaScript 程序编码规范(pdf).rar

    这篇PDF文档《JavaScript程序编码规范》详细介绍了编写JavaScript代码时应遵循的一系列规则和最佳实践。 首先,编码规范通常包括命名约定。在JavaScript中,变量、函数和对象的命名应该清晰、简洁且具有描述性。...

    refactorme-javascript-refactored:从一个专为测试开发人员重构能力而构建的项目中重构的项目

    总的来说,"refactorme-javascript-refactored"项目提供了一个实践和学习JavaScript重构的宝贵资源。通过深入研究这个项目,开发者不仅可以提高自己的重构技巧,还能提升代码质量,使得软件开发更加高效和可持续。

    Eclipse的JavaScript插件 JSEditor

    4. **代码重构**:JSEditor支持JavaScript代码重构,包括重命名变量、提取函数等操作,这些操作对大型项目尤为重要,因为它们可以保持代码的整洁和一致性。 5. **调试工具**:除了编辑功能,JSEditor还集成了...

    Eclipse的JavaScript插件 JSEditor.7z

    8. **代码重构**:提供了一系列重构工具,如重命名变量、提取函数等,帮助改善代码结构和可维护性。 9. **文档查看**:集成API文档查看功能,方便开发者查阅JavaScript库或框架的官方文档。 10. **性能优化**:JS...

    两款重量级js编辑器1st JavaScript Editor pjedit.exe

    6. **格式化和重构**:可以自动格式化代码,提高代码规范性,同时提供代码重构工具,简化代码结构。 PjEdit.exe则是一款多用途的文本编辑器,尽管不专门针对JavaScript,但其强大的功能也使其成为JavaScript开发的...

    MyEclipse,Eclipse下javascript插件

    其中,SPket是Eclipse中一个流行的JavaScript插件,它提供了代码补全、错误检查、重构等功能,有助于提高开发效率。 配置MyEclipse中的JavaScript支持: 1. 打开MyEclipse,进入“Window” -&gt; “Preferences”。 2....

    两个比较好用的Eclipse中javascript插件jsEditor jsEclipse

    jsEditor的特点包括代码高亮、自动完成、语法检查、错误提示等功能,这些功能极大地提高了编码效率。它还支持JQuery、AngularJS等流行的JavaScript库和框架,让开发者在编写前端代码时能够得到更多的帮助。此外,js...

    javascript的IDE(JavaScript.Editor.Pro)

    总的来说,JavaScript.Editor.Pro作为一款专业的JavaScript IDE,其核心优势在于提供高效的编码环境、强大的调试工具、全面的项目管理功能以及灵活的扩展性。通过这些特性,它旨在帮助开发者提升开发效率,实现高...

    JavaScript Code Improver

    1. **自动格式化**:工具可以自动调整代码的缩进、换行和空格,使得代码结构清晰,遵循一定的编码规范,如ESLint或Airbnb风格指南。 2. **代码简化**:通过消除不必要的复杂性,如冗余变量、过长的函数或复杂的嵌套...

    atari:使用JavaScript编码的Atari Breakout

    JavaScript Atari突破 使用JavaScript创建Atari Breakout。 游戏针对1080p分辨率显示器进行了优化; 在较高分辨率的显示器上播放可能会降低游戏的运行速度。... 2021-02-27:重构了“丑陋”的代码。 截屏:

    javascript的经典面试题汇总

    - **解析**:这种语法是不正确的,因为它不符合JavaScript的语法规则。 - **选项E**: `foo["a" + "t" + "t"]` - **解析**:这是通过字符串拼接动态构建属性名的正确方式。 **答案**: ACE #### 6. 在不指定特殊...

    编写可维护的JavaScript.pdf

    - **初学者**:本书适合JavaScript初学者学习基础的编码规范,建立起良好的编程习惯。 - **中级开发者**:对于有一定经验的开发者而言,《Maintainable JavaScript》能够帮助他们进一步提升代码质量,学会更高效的...

    Clean Code Javascript.zip

    9. **代码一致性**:遵循一致的编码风格,例如 Airbnb 的 JavaScript 风格指南,以提高代码的统一性和可读性。 10. **持续重构**:随着项目的发展,定期进行代码重构,去除冗余,优化结构,保持代码的整洁。 ...

    WEB标准与网站重构

    【WEB标准与网站重构】是关于现代Web开发领域中的核心概念,主要涵盖了如何构建高效、可访问、可维护且具有良好用户体验的网站。随着WEB2.0的兴起,这些标准成为了开发人员不可或缺的知识体系,旨在提升网页的互操作...

    javascript 压缩和加密工具

    2. **编码**:将JavaScript代码转换为其他格式,如Base64编码,使其看起来像乱码,但依然能正常运行。不过,这种做法并不能防止有经验的攻击者解码。 ### 使用JavaScript压缩和加密工具 在给定的文件`Javascript...

Global site tag (gtag.js) - Google Analytics