03 Mar 2012
浅说Javascript的namespace 和 private
- JavaScript: The Wrrrld’s Most Misunderstood Programming Language
- The World’s Most Misunderstood Programming Language Has Become the World’s Most Popular Programming Language
我参与的项目用了很多javascript。比如
- 中文版美味书签: 选集查看页面是用javascript渲染的; 选集创建,js也起了很重要的作用
- Track: 就是一个Javascript App, 很多逻辑都是 在浏览器完成, 包括routing, 生成HTML……
- Rssminer: javascript做了更多事情, 比如浏览器端 生产HTML, 去广告, 实现readability……
依赖Javascript有很多好处,不细说。缺点也有一堆,比如“没有namespace和private”, 他们是模块化和封装的基础,我感觉尤为关键。package
,private
是javascript的关键字,但是作用却是:不小心用作变量名, object的key,程序出错
,仅此而已。但是上帝在把门关上的时候,留了一个窗户
。用函数
可以实现他们(从某种意义上说)
// utils.js
(function () {
// private. given by closure
var private_var = 1;
var helper1 = function () { };
// namespace: YOUR_NS. given by javascript's global object
window.YOUR_NS = window.YOUR_NS || {};
window.YOUR_NS.utils = {
helper1: helper1 // export, public
};
// create an anonymous function, execute it immediately
})();
// app.js
(function () {
// like java's import, c++'s using namespace
var utils = window.YOUR_NS.utils;
var utils2 = window.YOUR_NS.utils; // rename
// direct import, java's import static
var helper1 = utils.helper1;
// you app's logic here
utils.helper1(); // smaple usage
utils2.helper1(); // smaple usage
helper1(); // smaple usage
})();
<!-- app.html -->
<!-- browser load and execute them in order -->
<script src="utils.js"></script>
<script src="app.js"></script>