惰性实例化要解决的问题是:避免了在页面中 JavaScript 初始化执行的时候就实例化类,如果在页面中没有使用这个实例化的对象,就会造成一定的内存浪费和性能消耗。如果将一些类的实例化推迟到需要使用它的时候才去做,就可以避免资源过早损耗,做到 “按需供应”。
// 惰性实列化代码如下
var myNamespace = function(){
var Configure = function(){
var privateName = "tugenhua";
var privateGetName = function(){
return privateName;
};
var privateSetName = function(name) {
privateName = name;
};
// 返回单列对象
return {
setName: function(name) {
privateSetName(name);
},
getName: function(){
return privateGetName();
}
}
};
// 存储Configure实列
var instance;
return {
init: function(){
// 如果不存在实列,就创建单列实列
if(!instance) {
instance = Configure();
}
// 创建Configure单列
for(var key in instance) {
if(instance.hasOwnProperty(key)) {
this[key] = instance[key];
}
}
this.init = null;
return this;
}
}
}();
// 调用方式
myNamespace.init();
var name = myNamespace.getName();
console.log(name); // tugenhua
如上代码是惰性化实列代码:它包括一个单体 Configure 实列,直接返回 init 函数,先判断该单体是否被实列化,如果没有被实列化的话,则创建并执行实列化并返回该实列化,如果已经实列化了,则返回现有实列;执行完后,则销毁 init 方法,只初始化一次
参考:理解惰性实列化