JacaScript 私有变量(四)增强的模块模式

有人进一步改进了模块模式,即在返回对象之前加入对其增强的代码。这种增强的模块模式适合那些单例必须是某种类型和的实例,同时还必须添加某些属性和(或)方法对其加以增强的情况。

var singleton = function() {
    // 私有变量和私有函数
    var privateVariable = 10;

    function privateFunction() {
        return false;
    }

    // 创建对象
    var object = new CustomType();

    // 添加特权/公有属性和方法
    object.publicProperty = true;

    object.publicMethod = function() {
        privateVariable++;
        return privateFunction();
    }

    return object;
}

如果 application 对象必须是 BaseComponent (不用去关心 BaseComponent 代码是如何实现的) 实例:


var application = function() {
    // 私有变量和函数
    var components = new Array();

    // 初始化
    components.push(new BaseComponent());

    // 创建 application 的一个副本
    var app = new BaseComponent();

    app.getComponentCount = function() {
        return components.length;
    }

    app.registerComponent: function(component) {
        if(typeof component == "object") {
            components.push(component);
        }
    }

    // 公共
    return app;
}();

在这个重写后的应用程序(application)单例中,首先也是像前面例子中一样定义了私有变量。主要不同之处在于命名变量 app 的创建过程,因为它必须是 BaseComponent 的实例。

这个实例实际上是 application 对象的局部变量版。此后,我们又为 app 对象添加了能够访问私有变量的公有方法。

最后一步是返回 app 对象,结果仍然是将它赋值给全局变量 application。

你可能感兴趣的:(JacaScript 私有变量(四)增强的模块模式)