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)