- 浏览: 1164667 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (224)
- Web UI (11)
- Dynamic Language (7)
- Framework (9)
- Note & Try (17)
- JavaScript (38)
- Ant/Gant/Maven (2)
- Database (5)
- Software Engineering (13)
- Career (29)
- Team Management (5)
- Performance (12)
- Algorithm (17)
- News & Commets (23)
- System Design (17)
- OO Design (8)
- API Design (3)
- Programming Paradigms (8)
- Asynchronous Programming (5)
- Architecture (6)
最新评论
-
a2320064997:
请问博主,排序的动图是怎么做出来的?
排序算法一览(二):归并类排序、分布类排序和混合类排序 -
你的微笑我得阳光:
试试验证码
reCAPTCHA项目 -
mack:
一般采用json
对象转换的问题 -
fly_hyp:
我也做了一个中文编程软件,叫趣智思成
一些中文编程语言 -
facingSun:
受教了
前端解耦的一个最简单示例
没有规矩,不成方圆,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可以自由地替换它的样式集合。
以上只能算冰山一角,抛砖引玉,实际项目中需要在开发过程中逐步细化和完善。
文章系本人原创,转载请注明作者和出处
评论
目前我还没有了解到JQ的事件绑定会对前端性能带来显著影响,如果你有这方面的了解,欢迎分享。
楼主你的上述代码中哪里出现聊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
也就是说:你的第一种方式,只是一种人为约定的一种封闭方式。从代码逻辑上来说,并不是真的无法访问了 .
楼主你的上述代码中哪里出现聊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
楼主你的上述代码中哪里出现聊instanceNum这个属性,如果是_instance_number,那t._instance_number也能够访问
发表评论
-
JavaScript 3D图表
2013-08-24 19:36 3135在说3D图表以前,首先要明确两个概念,一个是数据的维度,一个 ... -
几道容易出错的JavaScript题目
2013-07-07 10:34 2277下面这几道JavaScript题目大多来自于周五的一个小分享 ... -
JavaScript使用for循环时出现的问题
2013-05-26 00:36 1667这个问题的讨论最初来自公司内部邮件,我只是把这个问题的讨论内 ... -
DNS劫持
2013-04-30 13:59 2183想谈一谈这个话题是因为最近有一位朋友抱怨他的博客在某些用户某 ... -
你没有抓住Promises的要点
2013-04-21 20:52 2477注:这篇文章翻译自《You're Missing the P ... -
程序员,都去写一写前端代码吧
2013-01-19 01:16 2685你可以认为我是一个极 ... -
用JavaScript截图
2013-01-08 23:13 7666使用JavaScript截图,这里我要推荐两款开源组件: ... -
JQuery表格插件介绍:Flexigrid和DataTables
2012-12-27 11:35 8990JQuery的表格插件有很多。Flexigrid和Dat ... -
Flot介绍
2012-12-22 18:56 2375最近在项目里面要用到JavaScript来绘制图表,JQ ... -
Function Invocation Patterns
2012-11-04 17:46 1379今天看到微博上大家在讨论一个JavaScript的小问题 ... -
d3介绍
2012-10-31 00:17 2614D3.js是一个基于数据的操作文档的JavaScript ... -
Dart,你凭什么挑战JavaScript?
2012-09-26 08:46 5856不妨先来打量一下JavaScript。JavaScrip ... -
Backbone.js介绍
2012-05-08 22:57 4479注:教程请参见这里(本文有很多内容都是从这里翻译的),官方网站 ... -
关于CommonJS
2012-03-26 00:37 17295老实说,之前我对CommonJS也是一无所知,直到不久前Nod ... -
同步、异步转化和任务执行
2012-01-24 22:23 4244正如动静是相对的概念,有了它们,世界才充满盎然生气;变和不变也 ... -
JavaScript实现继承的几种方式
2012-01-07 23:21 12413在这篇文章中,介绍了 ... -
JavaScript重构(十):强化对象封装和模块封装
2011-09-19 22:44 36861、类本身就是一种封装形式,先来看看最简单的封装,JavaSc ... -
JavaScript 的 delete 用法
2011-01-09 11:59 17401、 var o = {}; o.x = new Ob ... -
疯狂的跨域技术
2011-01-09 19:39 2529[转]疯狂的跨域技术 原帖地址:http://itgeeker ... -
服务器端JavaScript
2011-01-11 00:05 1351JSConf2010的重要议题之一:node.js。 不要觉 ...
相关推荐
"javascript-refactoring:我在编码塞尔维亚会议上的演讲资料库"是一个专门探讨JavaScript重构主题的资源集合,源自2014年10月10日在编码塞尔维亚会议上的一次演讲。 重构是针对现有代码进行的结构改进,而不改变其...
因此,CSS重构旨在解决这些问题,通过整理规则、减少重复、提高选择器效率等方式,使CSS更加高效。 以下是一些关键的CSS重构和性能优化知识点: 1. **选择器优化**:避免使用过于复杂的选择器,例如后代选择器(`...
这篇PDF文档《JavaScript程序编码规范》详细介绍了编写JavaScript代码时应遵循的一系列规则和最佳实践。 首先,编码规范通常包括命名约定。在JavaScript中,变量、函数和对象的命名应该清晰、简洁且具有描述性。...
总的来说,"refactorme-javascript-refactored"项目提供了一个实践和学习JavaScript重构的宝贵资源。通过深入研究这个项目,开发者不仅可以提高自己的重构技巧,还能提升代码质量,使得软件开发更加高效和可持续。
4. **代码重构**:JSEditor支持JavaScript代码重构,包括重命名变量、提取函数等操作,这些操作对大型项目尤为重要,因为它们可以保持代码的整洁和一致性。 5. **调试工具**:除了编辑功能,JSEditor还集成了...
8. **代码重构**:提供了一系列重构工具,如重命名变量、提取函数等,帮助改善代码结构和可维护性。 9. **文档查看**:集成API文档查看功能,方便开发者查阅JavaScript库或框架的官方文档。 10. **性能优化**:JS...
6. **格式化和重构**:可以自动格式化代码,提高代码规范性,同时提供代码重构工具,简化代码结构。 PjEdit.exe则是一款多用途的文本编辑器,尽管不专门针对JavaScript,但其强大的功能也使其成为JavaScript开发的...
其中,SPket是Eclipse中一个流行的JavaScript插件,它提供了代码补全、错误检查、重构等功能,有助于提高开发效率。 配置MyEclipse中的JavaScript支持: 1. 打开MyEclipse,进入“Window” -> “Preferences”。 2....
jsEditor的特点包括代码高亮、自动完成、语法检查、错误提示等功能,这些功能极大地提高了编码效率。它还支持JQuery、AngularJS等流行的JavaScript库和框架,让开发者在编写前端代码时能够得到更多的帮助。此外,js...
总的来说,JavaScript.Editor.Pro作为一款专业的JavaScript IDE,其核心优势在于提供高效的编码环境、强大的调试工具、全面的项目管理功能以及灵活的扩展性。通过这些特性,它旨在帮助开发者提升开发效率,实现高...
1. **自动格式化**:工具可以自动调整代码的缩进、换行和空格,使得代码结构清晰,遵循一定的编码规范,如ESLint或Airbnb风格指南。 2. **代码简化**:通过消除不必要的复杂性,如冗余变量、过长的函数或复杂的嵌套...
JavaScript Atari突破 使用JavaScript创建Atari Breakout。 游戏针对1080p分辨率显示器进行了优化; 在较高分辨率的显示器上播放可能会降低游戏的运行速度。... 2021-02-27:重构了“丑陋”的代码。 截屏:
- **解析**:这种语法是不正确的,因为它不符合JavaScript的语法规则。 - **选项E**: `foo["a" + "t" + "t"]` - **解析**:这是通过字符串拼接动态构建属性名的正确方式。 **答案**: ACE #### 6. 在不指定特殊...
- **初学者**:本书适合JavaScript初学者学习基础的编码规范,建立起良好的编程习惯。 - **中级开发者**:对于有一定经验的开发者而言,《Maintainable JavaScript》能够帮助他们进一步提升代码质量,学会更高效的...
9. **代码一致性**:遵循一致的编码风格,例如 Airbnb 的 JavaScript 风格指南,以提高代码的统一性和可读性。 10. **持续重构**:随着项目的发展,定期进行代码重构,去除冗余,优化结构,保持代码的整洁。 ...
【WEB标准与网站重构】是关于现代Web开发领域中的核心概念,主要涵盖了如何构建高效、可访问、可维护且具有良好用户体验的网站。随着WEB2.0的兴起,这些标准成为了开发人员不可或缺的知识体系,旨在提升网页的互操作...
2. **编码**:将JavaScript代码转换为其他格式,如Base64编码,使其看起来像乱码,但依然能正常运行。不过,这种做法并不能防止有经验的攻击者解码。 ### 使用JavaScript压缩和加密工具 在给定的文件`Javascript...