将javascript命名空间添加到一个巨大的项目中
Add javascript namespacing to a huge project
我有一个庞大的项目,大约有4000行JavaScript。这个项目从未打算在另一个项目站点中使用,它一直被计划为单侧应用程序。遗憾的是,客户改变了他的观点,现在它应该与同一个网站应用程序中包含的其他3个项目一起运行。
现在,我必须确保没有一个变量或方法可以从另一个加载的js代码中"每次意外"删除或触摸,例如,如果下一个项目加载如"var mPath=/NowNewPath/","var mPath=/MyPath"当然会被覆盖。
如何添加以确保不会发生这种情况?添加命名空间,对吗?有什么想法可以解决所有4000行代码的清理问题吗?
首先,将所有内容封装在立即调用函数表达式中,以将所有变量封装在一个独立的范围中。
(function() {
/* all 4000 lines of code */
})();
其次,确保没有意外的全局变量-使用var
关键字声明局部变量。
(function() {
/* if you see this within the 4000 lines of code */
somePath = "abc";
/* change to this */
var somePath = "abc";
})();
最后,只公开一个(或尽可能少的)全局变量作为库的入口点。
/* "myLib" should be your globally-unique namespace */
myLib = (function() {
/* the 4000 lines of code */
return {
/* attach functions and variables */
somePath: somePath;
};
})();
alert(somePath); // undefined
alert(myLib.somePath); // "abc"
如果对每个JS文件或JS文件中的逻辑块使用立即调用的函数表达式,则不需要命名空间。所以你会得到:
// a.js
(function () {
var mPath = "/MyPath";
})();
// b.js
(function () {
var mPath = "/NowNewPath";
})();
两者都有自己的作用域,不能访问另一个作用域的变量。如果一个模块需要调用另一个模块的代码,那么您可以为每个模块导出一个已定义的接口。即
// a.js with a global variable
(function () {
var exports = {};
var mPath = "/MyPath";
exports.getPath = function () {
return mPath;
}
window.moduleA = exports;
})();
// b.js
(function () {
var mPath = moduleA.getPath() || "/NowNewPath";
})();
或退回出口:
var moduleA = (function () {
var exports = {};
// ....
return exports;
})();
或者使用require.js之类的方法。所有方法都应该很快添加,但您需要找到模块依赖项,无论如何,使用名称空间方法都可以找到这些依赖项。
相关文章:
- 我可以使用javascript在本地创建和保存一个巨大的文件吗
- 通过jQuery发布一个巨大的html表单
- AngularJS,过滤器:如何将一个巨大的对象(JSON)变成一个数组
- Browserify生成一个*巨大的*输出文件
- 使用 Javascript 优化一个巨大的无序列表
- 用Javascript框架重构一个巨大的表单
- 如何在一个巨大的多维数组中找到每列的最大长度
- 正在限制文本区域中的字数..但当我输入最大字数时,输入的文本突然变成了一个巨大的字符串
- 在JavaScript中循环遍历一个巨大的数组
- 如何通过javascript或jquery读取一个巨大的文本文件
- 用一个巨大的字符串“”转换数组;数字”;,用逗号分隔成一个数字数组(而不是字符串)
- Box2d创造了一个巨大的身体——把它分开
- 将javascript命名空间添加到一个巨大的项目中
- 有没有比insertAdjacentHTML()和一个巨大的HTML字符串更好的方法将HTML插入DOM中
- 完整的日历形式Arshaw不适合,它有一个巨大的高度
- 对一个巨大的数组进行并行或同步迭代会更快吗?
- 处理一个巨大的状态对象
- 如何使用 php 有效地将一个巨大的 JavaScript 字符串存储到文件中
- 使用数组值缩短一个巨大的列表
- 我可以在单个播放器中添加多个VAST标签吗?这意味着,如果一个巨大的广告无法加载,那么就采用另一个