js单例设计模式,命名空间,和模块化开发

单例设计模式(singleton pattern)

1.表现形式
var obj = {
xxx:xxx,

};
在单例设计模型中,OBJ不仅仅是对象名,它被称为“命名空间[NameSpace]”,把描述事务的属性存放到命名空间中,多个命名空间是独立分开的,互不冲突
2.作用
把描述同一件事务的属性和特征进行“分组、归类”(存储在同一个堆内存空间中),因此避免了全局变量之间的冲突和污染
var pattern1={name:‘xxx’}
var pattern2={name:‘xxx’}
3.单例设计模式命名的由来
每一个命名空间都是JS中Object这个内置基类的实例,而实例之间是相互独立互不干扰的,所以我们称它为“单例:单独的实例”

var name = "张三";
var age = 18;
var sex = "girl";

var name = "李四";
var age = 81;
var sex = "boy";

var person1={
   name:"张三",
   age:18
};
var person2={
   name:"李四",
   age:81
   

高级单例模式

1.在给命名空间赋值的时候,不是直接赋值一个对象,而是先执行匿名函数,形成一个私有作用域AA(不销毁的栈内存),在AA中创建一个堆内存,把堆内存地址赋值给命名空间
2.这种模式的好处:我们完全可以在AA中创造很多内容(变量OR函数),哪些需要供外面调取使用的,我们暴露到返回的对象中(模块化实现的一种思想)


var nameSpace = (function () {
 var n = 12;
 function fn() {
     //...
 }
 function sum() {

 }
 return {
     fn: fn,
     sum: sum
 }
})();

模块化开发

  • 1.团队协作开发的时候,会把产品按照功能板块进行划分,每一个功能板块有专人负责开发
  • 2.把各个版块之间公用的部门进行提取封装,后期在想实现这些功能,直接的调取引用即可(模块封装)
var utils=(function () {
    return {
        aa:function () {

        }
    }
})();

张三的模块
var skipRender = (function () {
    var fn = function () {
        //...
    };
    //...
    return {
        init: function () {

        },
        fn:fn
    }
})();
skipRender.init();

//=>李四的模块
var weatherRender = (function () {
    var fn = function () {

    };
    return {
        init: function () {
            fn();//=>调取自己模块中的方法直接调取使用即可
            skipRender.fn();//=>调取别人模块中的方法
        }
    }
})();
weatherRender.init();

你可能感兴趣的:(js)