js深度模块模式

本文摘自http://www.adequatelygood.com/JavaScript-Module-Pattern-In-Depth.html

1 Anonymous Closures

(function () {
// ... all vars and functions are in this scope only
// still maintains access to all globals
}());

2Global Import

(function ($, YAHOO) {
// now have access to globals jQuery (as $) and YAHOO in this code
}(jQuery, YAHOO));

3Module Export

var MODULE = (function () {
var my = {},
privateVariable = 1;

function privateMethod() {
// ...
}

my.moduleProperty = 1;
my.moduleMethod = function () {
// ...
};

return my;
}());

高级模式
1 Augmentation
var MODULE = (function (my) {
my.anotherMethod = function () {
// added method...
};

return my;
}(MODULE));

2 Loose Augmentation

var MODULE = (function (my) {
// add capabilities...

return my;
}(MODULE || {}));

3Tight Augmentation

var MODULE = (function (my) {
var old_moduleMethod = my.moduleMethod;

my.moduleMethod = function () {
// method override, has access to old through old_moduleMethod...
};

return my;
}(MODULE));

4 Cloning and Inheritance
var MODULE_TWO = (function (old) {
var my = {},
key;

for (key in old) {
if (old.hasOwnProperty(key)) {
my[key] = old[key];
}
}

var super_moduleMethod = old.moduleMethod;
my.moduleMethod = function () {
// override method on the clone, access to super through super_moduleMethod
};

return my;
}(MODULE));

5 Cross-File Private State
var MODULE = (function (my) {
var _private = my._private = my._private || {},
_seal = my._seal = my._seal || function () {
delete my._private;
delete my._seal;
delete my._unseal;
},
_unseal = my._unseal = my._unseal || function () {
my._private = _private;
my._seal = _seal;
my._unseal = _unseal;
};

// permanent access to _private, _seal, and _unseal

return my;
}(MODULE || {}));

6Sub-modules
MODULE.sub = (function () {
var my = {};
// ...

return my;
}());

7Conclusions
var UTIL = (function (parent, $) {
var my = parent.ajax = parent.ajax || {};

my.get = function (url, params, callback) {
// ok, so I‘m cheating a bit :)
return $.getJSON(url, params, callback);
};

// etc...

return parent;
}(UTIL || {}, jQuery));

时间: 2024-10-06 14:37:24

js深度模块模式的相关文章

JS通用模块模式 UMD

历史 JS诞生之初面向简单页面开发, 没有模块的概念. 后来页面逐渐复杂, 人类构造到 IIFE 立即执行函数来模拟 模块: 之前也有雅虎的实践,使用命名空间 作为模块名. 最后衍生出 面向各种使用场景 的 JS 模块标准. 例如: 面向浏览器的 AMD 面向Nodejs的 CommonJS 对于这种分裂状态ES标准也在尽力弥合. 但是目前流行的实践是 UMD模式. AMD https://www.davidbcalhoun.com/2014/what-is-amd-commonjs-and-u

JS模块模式

模块模式是非常常见的模式!它是以下几种模式的组合 命令函数 即时函数 私有和特权成员 声明依赖 该模式的第一步是建立一个命名空间. 下一步是定义该模块,通过即时函数来定义,主要要平衡私有函数和对外接口,同时在即时函数上面,可以声明模块可能有依赖模块的位置.最终结果是一个 由即时函数返回的对象,其中该对象包含了你模块的公共API. MYAPP.utilities.example = (function(){ //依赖模块 var obj = MYAPP.utilities.object; //私有

【javascript设计模式】构造器模式、模块模式、单例模式

构造器模式(Constructor) 构造器模式是学习js最早接触的一种,实现主要如下: 1 function myObject(name){ 2 this.name = name; 3 } 4 5 myObect.propotype = function sayName(){ 6 alert(this.name); 7 } 使用的时候需要new一个对象. 1 var myObj = new myObject('hello'); 2 myObj.sayName(); 模块模式(Module) 模

异步模块模式

简介 众所周知,模块化开是会将复杂的系统分解成高内聚.低耦合的模块,使系统开发变得可控.可维护.可拓展,提高模块复用率.而在js中,异步模块模式的情况则比较多,所谓异步模块模式,是在请求发出后,继续其他业务逻辑,直到模块加载完成后执行后续的逻辑,实现模块开发中对模块加载完成后的引用. 今天就来分析一下异步加载模块,本文通过创建与调度模块.加载模块和设置模块三个方面来分析 创建与调度模块 创建与调度方法集模块创建方法于一身.在这个方法中腰遍历所有依赖模块,并判断所有模块都存在才可执行回调函数,否则

Node.js(二)——模块与包管理工具

http,process等等这些都是模块 一.Node.js的模块与Commonjs规范 1.js的天生缺陷--缺少模块化管理机制 ·表现--JS中容易出现变量被覆盖,方法被替代的情况(既被污染).特别是存在依赖关系时,容易出现错误.这是因为JS缺少模块管理机制,来隔离实现各种不同功能的JS判断,避免它们相互污染. ·解决--经常采用命名空间的方式,把变量和函数限制在某个特定的作用域内,人肉约定一套命名规范来限制代码,保证代码安全运行.jQuery中有许多变量和方法,但是无法直接访问,必须通过j

Node.js文件模块fs监视文件变化

Node.js文件模块fs监视文件变化 Node中文件模块fs监视文件的函数源码如下: fs.watch = function(filename) { nullCheck(filename); var watcher; var options; var listener; if (util.isObject(arguments[1])) { options = arguments[1]; listener = arguments[2]; } else { options = {}; listen

angularjs学习笔记--主html&template html&module&template js、模块、控制器、双向数据绑定、过滤器

// Register the `phoneList` component on the `phoneList` module, angular. module('phoneList'). component('phoneList', {...}); // Define the `phonecatApp` module angular.module('phonecatApp', [ // ...which depends on the `phoneList` module 'phoneList'

Node.js 的模块系统

Node.js的模块系统是借鉴 CommonJS 的 Modules 规范实现的,因此,下面我们需要先了解 CommonJS 的 Modules 规范,希望对大家学习Node.js有所帮助. CommonJS 的 Modules 规范 CommonJS 对模块的定义非常简单,主要分为 模块引用.模块定义和模块标识三个部分. 1. 模块引用 - require() 方法 2. 模块定义 - module.exports 对象 3. 模块标识 - 传递给 require() 方法的参数 通过 Com

模块模式

模块模式: 在 JavaScript 中,Module模块用于模拟类的概念,使一个单独的对象拥有共有/私有方法和变量,从而屏蔽来自全局作用域的特殊部分.(产生的结果是:函数名与在页面上其他脚步定义的函数冲突的可能性降低) 涉及: 对象字面量: 闭包: 作用域. 实现的方法: 对象字面量表示法: Module 模式: AMD 模式: CommonJS 模式: ECMAScript Harmony 模块. 优点: 提供一个包装混合公有/私有方法和变量的方式,防止其泄露至全局作用域,与其他接口发生冲突