javascrip之单例模式----2022-11-19

2022-11-18  本文已影响0人  前端Tree
// 1、命名空间
// 解决的问题:明明空间解决了人们定义变量的时候起名冲突或者词汇匮乏的问题
var Ming = { 
    g: function(id) {
        return document.getElementById(id)
    },
    css: function(id, key, value) {
        // 简单样式属性设置
        this.g(id).style[key] = value
    }
}

// 2、模块分明
// 通过单例模块来管理代码库的各个模块
// 比如
// baidu.dom.addClass  // 添加元素类
// baidu.dom.append  // 插入元素
// baidu.event.stopPropagation   // 阻止冒泡
// baidu.event.preventDefault   // 阻止默认行为
// baidu.event.trim //去除字符串收尾空白字符
// baidu.event.encodeHTML // 将字符串进行html 编码

// 3、创建小型代码库
// 例如库A
var A= {
    Util : {
        util_method1: function(){},
        util_method2: function(){}
    },
    Tool : {
        util_method1: function(){},
        util_method2: function(){}
    },
    Ajax: {
        get: function(){ } ,
        post: function(){ } ,
    },
    others: {

    }
}
// 加入要使用的时候
A.Util.util_method1()
A.Tool.util_method1()
A.Ajax.get()

// 定义无法修改的静态变量
var Conf = (function(){
    // 私有变量
    var conf = {
        MAX_NUM: 100,
        MIN_NUM: 1,
        COUNT: 10000
    }
    // 返回取值器对象
    return {
        // 取值器方法
        get: function(name) {
            return conf[name]? conf[name]: null;
        }
    }
})();
// 为了实现创建后就能使用,我们就需要让匿名函数执行一次

// 用例:
var count = Conf.get('COUNT')
console.log(count)

// 4、惰性单例
// 惰性载入单例
var LazySingle = (function() {
    // 单例实例引用
    var _instance = null;
    // 单例
    function Single () {
        // 这里定义私有属性和方法
        return {
            publicMethod: function() {},
            publicProperty: '1.0'
        }
    }
    // 获取单利对象接口
    return function() {
        // 如果为创建单例将创建单例
        if(!_instance) {
            _instance = Single();
        }
        // 返回单例
        return _instance
    }
})();

// 测试一下
console.log(LazySingle().publicProperty)


上一篇下一篇

猜你喜欢

热点阅读