首页 > web前端 > js教程 > 正文

JavaScript重构:模块划分和命名空间

高洛峰
发布: 2016-11-25 13:27:21
原创
1048人浏览过

通常我们的团队中,开发人员在java语言层面具备相当的技术素养,经验丰富,而且有许多成熟的、合理的规约,类型繁多的代码隐患检查工具,甚至在团队间还有计划内的评审和飞检。但是前端的代码不似后台,就像一个没人疼的孩子,不仅仅容易被低估、被轻视,导致质量低劣、可维护性差,技能上,更缺少优秀的前端开发人员。
javascript是前台代码中重要组成部分,随着版本的延续,产品越做越大,javascript层面的重构,需要在整个过程中逐步强化起来。
 
当代码量达到一定程度,javascript最好能够与页面模块组件(例如自定义的freemarker标签)一起被模块化。
模块化带来的最大好处就是独立性和可维护性,不用在海量的js中定位问题位置,简单了,也就更容易被理解和接受,更容易被定制。
模块之间的依赖关系最好能够保持简单,例如有一个common.js,成为最通用的函数型代码,不包含或者包含统一管理的全局变量,要求其可以独立发布,其他组件js可以轻松地依赖于它。举个例子,我们经常需要对字符串实现一个trim方法,可是js本身是不具备的,那么就可以在这个common.js中扩展string的prototype来实现,这对外部的使用者是透明的。
 
使用命名空间是保持js互不干扰的一个好办法,js讲究起面向对象,就必须遵循封装、继承和多态的原则。
参照java import的用法,我希望命名空间能带来这样的效果,看一个最简单的实例吧:
我有一个模块play,其中包含了一个方法webonlineplay,那么在没有import这个模块的时候,我希望是js的执行是错误的:
java代码 
webonlineplay(); //error! 无法找到方法 
 
但是如果我引入了这个模块:
java代码 
import("play"); 
 
webonlineplay(); //正确,能够找到方法 
 
其实实现这样的效果也很简单,因为默认调用一个方法webonlineplay()的实质是:window.webonlineplay(),对吗?
所以在import("play")的时候,内部实现机制如下:
java代码 
var module = new playmodule(); 
 
对于这个模块中的每一个方法,都导入到window对象上面,以直接使用:
java代码 
window[methodname] = module[methodname]; 
 
其实这里并没有什么玄机,但是这种即需即取的思想却给前端重构带来了一个思路,一个封装带来的可维护性增强的思路,不是吗?
 
聪明的你也许还会提到一个问题:
如果我没有import这个play模块,这个页面都不需要,那我能否连这个play.js都不加载呢?
当然可以,请关注后面的分解——关于js的动态加载的部分。

Ke361开源淘宝客系统源码
Ke361开源淘宝客系统源码

Ke361是一个开源的淘宝客系统,基于最新的ThinkPHP3.2版本开发,提供更方便、更安全的WEB应用开发体验,采用了全新的架构设计和命名空间机制, 融合了模块化、驱动化和插件化的设计理念于一体,以帮助想做淘宝客而技术水平不高的朋友。突破了传统淘宝客程序对自动采集商品收费的模式,该程序的自动 采集模块对于所有人开放,代码不加密,方便大家修改。集成淘点金组件,自动转换淘宝链接为淘宝客推广链接。

Ke361开源淘宝客系统源码 229
查看详情 Ke361开源淘宝客系统源码
相关标签:
java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号