1. 4 JavaScript Design Patter you should Know。
Module Design Patter(模块设计模式)
JavaScript的模块是用于保持代码独立于其他部件中 最普遍的设计模式。提供松散耦合 支持结构良好的代码。
模块应立即调用的函数进行表达式(IIFE),允许私人领域 - 即保护变量和方法闭包(但是,它会返回一个对象,而不是函数。
这里 我们会回到我们的对象 我们回到之前实例化私有变量和功能 我们的封闭代码之外不能因为它不是在同一范围内访问这些私有变量 我们更具体的实现。
callChangeHTML
结合至返回的对象,并可以在中引用HTMLChanger
的命名空间。然而,该模块外时,内容不能被引用。
模块模式的思路是为单体模式添加私有变量和私有方法能够减少全局变量的使用。模块模式使用了一个返回对象的匿名函数。在这个匿名函数内部,先定义了私有变量和函数,供内部函数使用,然后将一个对象字面量作为函数的值返回,返回的对象字面量中只包含可以公开的属性和方法。这样的话,可以提供外部使用该方法;由于该返回对象中的公有方法是在匿名函数内部定义的,因此它可以访问内部的私有变量和函数。
我们什么时候使用模块模式?
如果我们必须创建一个对象并以某些数据进行初始化,同时还要公开一些能够访问这些私有数据的方法,那么我们这个时候就可以使用模块模式了。
揭示模块模式。
模块模式的一种变体 是 显露的模块模式 目的是保持封装和揭示对象文本返回某些变量和方法。
1 var Exposer = (function() { 2 var privateVariable = 10; 3 4 var privateMethod = function() { 5 console.log('Inside a private method!'); 6 privateVariable++; 7 } 8 9 var methodToExpose = function() { 10 console.log('This is a method I want to expose!'); 11 } 12 13 var otherMethodIWantToExpose = function() { 14 privateMethod(); 15 } 16 17 return { 18 first: methodToExpose, 19 second: otherMethodIWantToExpose 20 }; 21 })(); 22 23 Exposer.first(); // Output: This is a method I want to expose! 24 Exposer.second(); // Output: Inside a private method! 25 Exposer.methodToExpose; // undefined
3. 原型模式
4. 观察者模式
在AngularJS,如果$scope
对象的更新,可以触发一个事件来通知另一个组件。观察者模式结合了这一点-如果一个对象被修改,它广播到已经发生了改变依赖的对象。另一个典型的例子是模型 - 视图 - 控制器(MVC)架构; 当模型改变视图更新。一个好处是从模型解耦视图,以减少依赖关系。