JavaScript 惰性实例化代码

Posted 小车厂

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JavaScript 惰性实例化代码相关的知识,希望对你有一定的参考价值。

惰性实例化要解决的问题是:避免了在页面中 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 方法,只初始化一次

 

参考:理解惰性实列化

 

以上是关于JavaScript 惰性实例化代码的主要内容,如果未能解决你的问题,请参考以下文章

创建片段而不从 java 代码实例化它

片段事务中的实例化错误

从延迟处理讲起,JavaScript 也能惰性编程?

使用 CoreData,如果我有一个 @dynamic 属性,我可以像 @synthesized 一样覆盖它的 getter 吗? (惰性实例化)

javascript 设计模式1----单例模式

Swift 常量默认是惰性的吗?