Javascript 最佳实践:全局对象与模块
我目前正在做一个项目,看到了下面的代码,这些代码用于在窗口对象中存储每个“模块”。多年来,我做了大量的Javascript,从我对最佳实践的理解来看,您希望避免污染全局名称空间。这会被认为是对全局名称空间的污染吗Javascript 最佳实践:全局对象与模块,javascript,javascript-objects,Javascript,Javascript Objects,我目前正在做一个项目,看到了下面的代码,这些代码用于在窗口对象中存储每个“模块”。多年来,我做了大量的Javascript,从我对最佳实践的理解来看,您希望避免污染全局名称空间。这会被认为是对全局名称空间的污染吗 (function (global) { "use strict"; // Public methods. var exports = {}; /* * Some other configuration / members *
(function (global) {
"use strict";
// Public methods.
var exports = {};
/*
* Some other configuration / members
*
*/
global.Helper = exports.members;
return exports;
}(window));
我习惯于使用模块模式来构造Javascript
下面的例子
var module = (function () {
var defaultOptions = {
//some options
};
var init = function (options) {
defaultOptions = $.extend(defaultOptions, options, false);
};
/*
* More code
*
*/
//public functions
return {
init: init
}
})();
从最佳实践的角度来看,我的理解是正确的还是完全错了
将每个模块存储在窗口对象中是可以接受的做法吗?我认为最好将模块放在全局空间中,因为将使用您的模块的每个人都将被迫将其仅与窗口变量一起使用 另一个原因-是否始终定义窗口对象
所有著名的JavaScript模块都是在全局范围内定义的:jquery、prototype、yii等。“因此避免在全局名称空间中存储任何内容”--但是
var模块
是在全局空间中定义的。公正的评论、重新编写的帖子您必须在全局名称空间中放置一些内容,否则应用程序将无法使用它。但是,通过对整个名称空间使用单个名称,并对每个模块使用名称空间中的属性,可以最大限度地减少污染。就像所有jQuery插件都是$一样。有些东西
。我认为zerkms的观点是,在运行第二个代码段之后,您就有了window.module==={init:function{…}