接着上一篇“Javascript模块化编程之Why”说起,Javascript担子重了之后程序也就复杂了。在大把语言都模块化编程的形势下,Javascript也不可能袖手旁观啊,毕竟这是一条经过实践检验的道路。C++有namespace,Java有包,但Javascript有什么呢?

现在满大街都是Javascript模块化编程相关的文章,一方面说明Javascript的春天到了,另一方面则充分说明Javascript模块化编程不是那么容易的事,不信你看看C++和Java等语言模块化编程的文章就知道了。难道没有namespace和包这些机制就真的这么困难吗?如果仅仅是没有这些,还真没有那么困难。

相信很多人学习编程都是从C语言开始的,但实际工作中,只有少数人使用C语言,更多的是使用C++,Java等面向对象的语言。个人没有对语言做深入的分析,只是实际工作中用面向对象貌似更容易解决复杂问题。相信大家也差不多这样的感觉。在尝到面向对象的甜头后,你会爱上它的。不幸的是Javascript语言同C语言一样,在语言层面上,没有真正的类,要不然也不会出现prototype.js这类基础库了。

没有真正的类意味着什么呢?最直接的就是无法在语言层面控制哪些是私有的,哪些是公有的。对于所有的外部模块而言,都是公有的。因为这个原因你会看到在很多Javascript的代码中,存在许多以"_"开始的变量名,这表示什么意思呢?这是一种命名规范所要求的,私有变量名前面加"_"前缀,这类变量不能被外部模块访问。虽然这种限制不怎么靠谱,但也只能这样了。没有可见性限制,会让模块的独立性遇到很大的挑战。而要处理这些问题,就不那么简单了。

连真正的类都不存在,更不用说其他方面了,更进一步说,模块化编程困难的原因主要归根于Javascript语言的抽象层次太低了,这样必然会导致重复利用率不高。对于模块化编程而言,这自然不是什么好事。虽然面临各种各样的困难,但也难不住高智商的人类啊,办法总是有的。C语言不一样可以玩出面向对象,玩出操作系统嘛!对C语言这方面有兴趣的请前往google,我这暂且只说Javascript,怎么把它玩出对象,玩出模块化呢?

欲知后事如何,请看下次分解!

Javascript模块化编程之难处的更多相关文章

  1. Javascript模块化编程(三):require.js的用法

    Javascript模块化编程(三):require.js的用法 原文地址:http://www.ruanyifeng.com/blog/2012/11/require_js.html 作者: 阮一峰 ...

  2. Javascript模块化编程(二):AMD规范

    Javascript模块化编程(二):AMD规范   作者: 阮一峰 原文地址:http://www.ruanyifeng.com/blog/2012/10/asynchronous_module_d ...

  3. Javascript模块化编程(一):模块的写法

    Javascript模块化编程(一):模块的写法 作者: 阮一峰 原文链接:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html ...

  4. Javascript模块化编程(二):AMD规范(转)

    这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可以更方便地使用别人的代码,想要 ...

  5. Javascript模块化编程(一):模块的写法(转)

    随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理.单元测试等等......开发者 ...

  6. Javascript模块化编程(二):AMD规范 作者: 阮一峰

    声明:转载自阮一峰的网络日志 这个系列的第一部分介绍了Javascript模块的基本写法,今天介绍如何规范地使用模块. (接上文) 七.模块的规范 先想一想,为什么模块很重要? 因为有了模块,我们就可 ...

  7. Javascript模块化编程(一):模块的写法 作者: 阮一峰

    声明:转载自阮一峰的网络日志 随着网站逐渐变成"互联网应用程序",嵌入网页的Javascript代码越来越庞大,越来越复杂. 网页越来越像桌面程序,需要一个团队分工协作.进度管理. ...

  8. Javascript模块化编程之路——(require.js)

    转自:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html Javascript模块化编程(一):模块的写法 随着网站逐渐变成&q ...

  9. Javascript模块化编程(一):模块的写法 (转载 学习中。。。。)

    转载地址:http://www.ruanyifeng.com/blog/2012/10/javascript_module.html 阮一峰 大神:http://www.ruanyifeng.com/ ...

随机推荐

  1. 类(class)能不能自己继承自己(转)

    类(class)能不能自己继承自己不行,继承关系会出现环. 假设类A继承类A.那么要新建一个类A的对象,就必须先建立一个类A父类的对象.这是一个递归的过程,而且没有终止条件.会死循环的. 从编译的角度 ...

  2. RQNOJ PID3 / Jam的计数法

    题目描述 Jam是个喜欢标新立异的科学怪人.他不使用阿拉伯数字计数,而是使用小写英文字母计数,他觉得这样做,会使世界更加丰富多彩.在他的计数法中,每个数字的位数都是相同的(使用相同个数的字母),英文字 ...

  3. Entity Framework执行Sql语句返回DataTable

    Entity Framework中对外开放了数据库连接字符串,使用的时候可以直接得到这个连接字符串,然后进行相关的操作.如果在使用的过程中,发现Entity Framework中有一些满足不了的需求的 ...

  4. 随手记UIKit Dynamics

    以今年的优势WWDC品行,我记得一些明年的元素.一些博客上找到了新的功能没有被记录.认为iOS 8全力以赴.iOS 7该属性不随手记录为时已晚 :) 参考WWDC 2013的Session Video ...

  5. Oracle内存管理(五)

    [深度分析--eygle]学习笔记 1.4. 2其他内存组件 Large Pool-大池是SGA的一个可选组件,通经常使用于共享server模式(MTS). 并行计算或 RMAN的备份恢复等操作. J ...

  6. 【淡墨Unity3D Shader计划】四 热带雨林的文章: 排除、深度测试、Alpha测试和基本雾编译

    本系列文章由@浅墨_毛星云 出品,转载请注明出处.   文章链接:http://hpw123.net/a/C__/kongzhitaichengxu/2014/1222/163.html 作者:毛星云 ...

  7. 【Swift】 GET&POST请求 网络缓存的简单处理

     GET & POST 的对比 源码:https://github.com/SpongeBob-GitHub/Get-Post.git 1. URL - GET 所有的参数都包含在 URL 中 ...

  8. redis修改的源代码zincrby,hincrby命令

    在项目中大量使用zincrby命令.究其原因是统计一些统计指标的日志值,和需要返回到顺序topn. 通常情况下,.调用一次的指示器zincrby(zincrby default:type 1 type ...

  9. nginx的五种负载算法模式

    nginx 负载均衡5种配置方式 1.轮询(默认) 每个请求按时间顺序逐一分配到不同的后端服务器,如果后端服务器down掉,能自动剔除. 2.weight  指定轮询几率,weight和访问比率成正比 ...

  10. .NET:从 Mono、.NET Core 说起

    魅力 .NET:从 Mono..NET Core 说起 前段时间,被问了这样一个问题:.NET 应用程序是怎么运行的? 当时大概愣了好久,好像也没说出个所以然,得到的回复是:这是 .NET 程序员最基 ...